├── .eslintrc
├── .gitignore
├── README.md
├── components
├── Header.js
└── Post.js
├── next.config.js
├── package-lock.json
├── package.json
├── pages
├── _app.js
├── blog
│ └── [slug].js
└── index.js
├── posts
├── django-crash-course.md
├── javascript-performance-tips.md
├── new-in-php-8.md
├── python-book-review.md
├── react-crash-course.md
├── tailwind-vs-bootstrap.md
└── writing-great-unit-tests.md
├── public
├── favicon.ico
├── images
│ └── posts
│ │ ├── img1.jpg
│ │ ├── img2.jpg
│ │ ├── img3.jpg
│ │ ├── img4.jpg
│ │ ├── img5.jpg
│ │ ├── img6.jpg
│ │ └── img7.jpg
└── vercel.svg
├── styles
└── globals.css
└── utils
└── index.js
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["next", "next/core-web-vitals"],
3 | "rules": {
4 | "@next/next/no-img-element": "off"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Next Markdown Blog
2 |
3 | Simple static blog using markdown and Next.js
4 |
5 | [DEMO](https://next-markdown-blog-drab.vercel.app/)
6 |
7 | ## Usage
8 |
9 | ```bash
10 | # Install dependencies
11 | npm install
12 |
13 | # Run dev server
14 | npm run dev
15 |
16 | # Build for prod and export static website
17 | npm run build
18 | ```
19 |
--------------------------------------------------------------------------------
/components/Header.js:
--------------------------------------------------------------------------------
1 | import Link from 'next/link'
2 |
3 | export default function Header() {
4 | return (
5 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/components/Post.js:
--------------------------------------------------------------------------------
1 | import Link from 'next/link'
2 |
3 | export default function Post({ post }) {
4 | return (
5 |
6 |

7 |
8 |
Posted on {post.frontmatter.date}
9 |
10 |
{post.frontmatter.title}
11 |
12 |
{post.frontmatter.excerpt}
13 |
14 |
15 |
Read More
16 |
17 |
18 | )
19 | }
20 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | reactStrictMode: true,
3 | }
4 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "next-markdown-blog",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build && next export",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "gray-matter": "^4.0.3",
13 | "marked": "^2.1.2",
14 | "next": "11.0.1",
15 | "react": "17.0.2",
16 | "react-dom": "17.0.2"
17 | },
18 | "devDependencies": {
19 | "eslint": "7.29.0",
20 | "eslint-config-next": "11.0.1"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/pages/_app.js:
--------------------------------------------------------------------------------
1 | import Header from '../components/Header'
2 | import '../styles/globals.css'
3 |
4 | function MyApp({ Component, pageProps }) {
5 | return (
6 | <>
7 |
8 |
9 |
10 |
11 | >
12 | )
13 | }
14 |
15 | export default MyApp
16 |
--------------------------------------------------------------------------------
/pages/blog/[slug].js:
--------------------------------------------------------------------------------
1 | import fs from 'fs'
2 | import path from 'path'
3 | import matter from 'gray-matter'
4 | import marked from 'marked'
5 | import Link from 'next/link'
6 |
7 | export default function PostPage({
8 | frontmatter: { title, date, cover_image },
9 | slug,
10 | content,
11 | }) {
12 | return (
13 | <>
14 |
15 | Go Back
16 |
17 |
18 |
{title}
19 |
Posted on {date}
20 |

21 |
24 |
25 | >
26 | )
27 | }
28 |
29 | export async function getStaticPaths() {
30 | const files = fs.readdirSync(path.join('posts'))
31 |
32 | const paths = files.map((filename) => ({
33 | params: {
34 | slug: filename.replace('.md', ''),
35 | },
36 | }))
37 |
38 | return {
39 | paths,
40 | fallback: false,
41 | }
42 | }
43 |
44 | export async function getStaticProps({ params: { slug } }) {
45 | const markdownWithMeta = fs.readFileSync(
46 | path.join('posts', slug + '.md'),
47 | 'utf-8'
48 | )
49 |
50 | const { data: frontmatter, content } = matter(markdownWithMeta)
51 |
52 | return {
53 | props: {
54 | frontmatter,
55 | slug,
56 | content,
57 | },
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 | import fs from 'fs'
2 | import path from 'path'
3 | import matter from 'gray-matter'
4 | import Head from 'next/head'
5 | import Post from '../components/Post'
6 | import { sortByDate } from '../utils'
7 |
8 | export default function Home({ posts }) {
9 | return (
10 |
11 |
12 |
Dev Blog
13 |
14 |
15 |
16 | {posts.map((post, index) => (
17 |
18 | ))}
19 |
20 |
21 | )
22 | }
23 |
24 | export async function getStaticProps() {
25 | // Get files from the posts dir
26 | const files = fs.readdirSync(path.join('posts'))
27 |
28 | // Get slug and frontmatter from posts
29 | const posts = files.map((filename) => {
30 | // Create slug
31 | const slug = filename.replace('.md', '')
32 |
33 | // Get frontmatter
34 | const markdownWithMeta = fs.readFileSync(
35 | path.join('posts', filename),
36 | 'utf-8'
37 | )
38 |
39 | const { data: frontmatter } = matter(markdownWithMeta)
40 |
41 | return {
42 | slug,
43 | frontmatter,
44 | }
45 | })
46 |
47 | return {
48 | props: {
49 | posts: posts.sort(sortByDate),
50 | },
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/posts/django-crash-course.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Django Crash Course'
3 | date: 'March 5, 2021'
4 | excerpt: 'Django is a very powerful, high level Python framework for building web applications'
5 | cover_image: '/images/posts/img3.jpg'
6 | ---
7 |
8 | Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
9 | haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
10 | manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
11 | verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
12 | pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
13 | in.
14 |
15 | 1. Serrae enim Etruscam aquis
16 | 2. Et premis et flumine frontem minatur oppressos
17 | 3. Inquam rector Icarus possum vim tumulo propiusque
18 | 4. Vulnus se Latreus
19 | 5. Aptumque bis
20 |
21 | ## Turpius Aegides membris colat volentes fallere
22 |
23 | Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
24 | consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
25 | Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
26 | procul fugitque corpora iugales!
27 |
28 | var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
29 | rgb + nybbleBaseband;
30 | permalinkCertificateMacintosh(ergonomicsIsdnDns);
31 | boot = bridgeDaemonActive;
32 |
33 | ## O contra diu
34 |
35 | Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
36 | premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
37 | sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
38 | nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
39 | rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
40 | nam nil, pariter.
41 |
42 | Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
43 | aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
44 | sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
45 | oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
46 |
47 | Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
48 | _gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
49 | quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
50 | respice humum vobis oscula, in Lotis nymphae.
51 |
52 | Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
53 | Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
54 | capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
55 | ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
56 | visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
57 | porrigar **patriam** Alcmene: attonitas.
58 |
--------------------------------------------------------------------------------
/posts/javascript-performance-tips.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'JavaScript Performance Tips'
3 | date: 'March 4, 2021'
4 | excerpt: 'We will look at 10 simple tips and tricks to increase the speed of your code when writing JS'
5 | cover_image: '/images/posts/img1.jpg'
6 | ---
7 |
8 | Lorem [markdownum](http://insunt.org/inpositaque), et sanguine rutilos dixit
9 | nigro cornu genus duris linguae. Super hic deus ego adveniens nullumque Venerem
10 | equis aurem aliisque celare densis dextramque similis **post**: mihi rexerat;
11 | bis.
12 |
13 | 1. Scinditur annos
14 | 2. Talia verba
15 | 3. Habet delata villis domui
16 | 4. Geminum viscere deum et utque
17 |
18 | ## Magnorum nulla avertit pedem neque monimenta terram
19 |
20 | Quo numquam, nunc [concussaque](http://mox-cunctos.net/), hora effugit mihi,
21 | pectore. Hinc fausto, circumspicit cadas; virilibus rapui, timidum rorat cuique
22 | animorum ac! Quem sit. Venit qui, rex sibi tota, peto _fortis ira suis_ dolusque
23 | simulatque [incipit crudelesque
24 | pavens](http://www.corpora.com/terrae-oscula.html) spatiosa conlegit oscula
25 | equam.
26 |
27 | ## Mensis idem
28 |
29 | Caelestia Ganymedes gentis. Veni inpellit publica tecta bellaque mortali loca
30 | _mea gente_ qui Enipeus iramque et hoc. _Altera Rex vetitum_; hoc magis dolores
31 | precor nec. Ubi verba, et aras regia, cognoscere vites tempusque expers, heros?
32 |
33 | ## Mihi puto pallorem
34 |
35 | Hac forma, habeo quam et patria, ille tulit volat quamquam vulnus, aere est.
36 | Ignis sequerere membra Pirithoo: caruerunt saevumque, sumus, ignesque poterit
37 | intus de fonte.
38 |
39 | ## Quondam montibus tua spes consilioque nata consilioque
40 |
41 | Abigitque limite. Ipsa levis extulit munera, litora, ira pavet in morte, **te
42 | in** quas [vix](http://auxiliumquefando.net/vocibus-cum). Mitis tinxit, modus
43 | promissa **ne volucris** simul genetrixque Iovis in deae modo **in** des.
44 | _Memini isto hostilia_ Aeneas, in ponto **nova eventu cetera** iugum animam
45 | ille, viro, nec. Loquendi aves insisto saecula premente nec, at ego poscit ubi
46 | sub!
47 |
48 | - Tristis natorum ora talia patriis famae naidas
49 | - Deus scilicet male miliaque noctisque invenio Nilum
50 | - Efficerentque devexaque foret haec leve ab fertilis
51 |
52 | Institerat quantum facies parientem, crepitantis nondum. Atque atris arcebat
53 | factis nil Lucina mori sinu est partibus specie, imo interea tellus luctu
54 | inmunitamque genus Amphitryoniaden?
55 |
--------------------------------------------------------------------------------
/posts/new-in-php-8.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "What's New In PHP 8?"
3 | date: 'March 7, 2021'
4 | excerpt: 'In this article we will look at some of the new features offered in version 8 of PHP'
5 | cover_image: '/images/posts/img4.jpg'
6 | ---
7 |
8 | Lorem markdownum erat meritum instat quis! Parari vera harundinibus molibus nam
9 | illuc, **egi** tellus [facta ruinas](http://necloqui.com/fuit.html), iterumque!
10 | Parvo quae hinc cura poterat Iove gurgite thalamis fugitque turis, quin nunc.
11 |
12 | var pdf_linux_radcab = gibibyteAspUri + firewireIvr -
13 | jre_software_character;
14 | var megabit_layout = 38 + executableExpansionHdd(storage_import_runtime,
15 | tweenJpeg) - contextual;
16 | url_bing.upnp_modifier_cold(linkedin, inputTrackballRefresh.flatProcessJsp(
17 | -1, nodeMacintosh, sramCardSpoofing) + text,
18 | version_daemon_latency.localhost_compact_boot.dosSpool(
19 | memory_controller_blu(jpegServer, maximizeAsciiType), status));
20 |
21 | Iungunt cuspis rarissima tendentem domus natis tamen ultima domino invidiosa
22 | cautum nec falcatus viridi omnes, soror. Ire tacita. Dissidet eat voce et
23 | Pactolides illa sed [hunc](http://passim.com/) longi illa arborea, dum securi;
24 | vidit.
25 |
26 | ## Dant testa animalia sequendi paterni manus parte
27 |
28 | _Venus_ dissimulare perii _iaculatur dedere multumque_ sitim, cur tela
29 | temeraria, per? Meum eque deae tu vidisse Frigus triennia, equo
30 | [trahit](http://in.net/ignarusfuit.html), enim verti commota prima cornibus
31 | pectora!
32 |
33 | tiffWord(snippetAnimatedCd);
34 | wrap_exbibyte = cropStation;
35 | if (page(mailDvCybersquatter, error, ip)) {
36 | xsltMacintosh += ip;
37 | } else {
38 | social += traceroute_redundancy_voip;
39 | box_isp.lion = wepSuffix;
40 | }
41 |
42 | Tam Pomona _fixis cera vidisse_ Sperchios ista _concordes_ parte comes animalia
43 | ira miserae magna iaculatur sententia abest. [Est](http://puer-nec.io/squalidus)
44 | illam esse hasta? Iamque Argolico spumam quondam, Sirenes dolor longus arbor
45 | perque.
46 |
47 | ## Iamque illa numquam dictis
48 |
49 | Verberat arma parte mariti, tempora mugit glomerataque illa epulis: Troiam. De
50 | illo ut Lyncus an mihi, est alas ventisque et **opem**, iure anxia, pes qua
51 | quodque nati. Morti est tertia tutissimus prope, **herbas** hoc cecidere
52 | videres. Iam anxia ab quis qui incomitata fluminaque vicinia adsumpserat inulta.
53 | Nascentia tibi significat fixurus quam Cnosiaci spectat obstipuere quem
54 | plenissima ita tangit cum nisi.
55 |
56 | class.runtimeFatSku += 2 * 8;
57 | if (command) {
58 | mini = video;
59 | handle_repository_mtu = osd_boot_mips(lamp + 2,
60 | managementMultiplatformBoot(rubyLockWpa, 1), laptopHdtv);
61 | horse += 2 + address(ictPinterestPpga, -5);
62 | }
63 | wiki_responsive_flash.ddr_disk -= c_cd +
64 | andCopy.intellectual_so_iteration.cross(moduleReadme, programming +
65 | broadband);
66 |
67 | Mirantia deique sacerdos, opus, at [generis eandem
68 | planamque](http://www.potentia.net/lapis). Caecos pedibus velo pennas esse nam
69 | nostri **rapit**, diu Caras, amantem, Areos Aeacides via. Ad quiescere, per
70 | dolores quoque; iterum Alcmene, est usque micantes subitae!
71 |
--------------------------------------------------------------------------------
/posts/python-book-review.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Python Book Review'
3 | date: 'March 7, 2021'
4 | excerpt: 'In this review, we will be looking at the new Python book from Oriley'
5 | cover_image: '/images/posts/img6.jpg'
6 | ---
7 |
8 | Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
9 | haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
10 | manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
11 | verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
12 | pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
13 | in.
14 |
15 | 1. Serrae enim Etruscam aquis
16 | 2. Et premis et flumine frontem minatur oppressos
17 | 3. Inquam rector Icarus possum vim tumulo propiusque
18 | 4. Vulnus se Latreus
19 | 5. Aptumque bis
20 |
21 | ## Turpius Aegides membris colat volentes fallere
22 |
23 | Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
24 | consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
25 | Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
26 | procul fugitque corpora iugales!
27 |
28 | var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
29 | rgb + nybbleBaseband;
30 | permalinkCertificateMacintosh(ergonomicsIsdnDns);
31 | boot = bridgeDaemonActive;
32 |
33 | ## O contra diu
34 |
35 | Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
36 | premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
37 | sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
38 | nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
39 | rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
40 | nam nil, pariter.
41 |
42 | Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
43 | aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
44 | sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
45 | oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
46 |
47 | Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
48 | _gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
49 | quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
50 | respice humum vobis oscula, in Lotis nymphae.
51 |
52 | Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
53 | Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
54 | capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
55 | ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
56 | visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
57 | porrigar **patriam** Alcmene: attonitas.
58 |
--------------------------------------------------------------------------------
/posts/react-crash-course.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'React Crash Course'
3 | date: 'March 8, 2021'
4 | excerpt: 'Crash course to learn the React JavaScript library. We will look at components, hooks and more'
5 | cover_image: '/images/posts/img5.jpg'
6 | ---
7 |
8 | Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
9 | haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
10 | manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
11 | verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
12 | pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
13 | in.
14 |
15 | 1. Serrae enim Etruscam aquis
16 | 2. Et premis et flumine frontem minatur oppressos
17 | 3. Inquam rector Icarus possum vim tumulo propiusque
18 | 4. Vulnus se Latreus
19 | 5. Aptumque bis
20 |
21 | ## Turpius Aegides membris colat volentes fallere
22 |
23 | Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
24 | consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
25 | Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
26 | procul fugitque corpora iugales!
27 |
28 | var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
29 | rgb + nybbleBaseband;
30 | permalinkCertificateMacintosh(ergonomicsIsdnDns);
31 | boot = bridgeDaemonActive;
32 |
33 | ## O contra diu
34 |
35 | Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
36 | premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
37 | sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
38 | nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
39 | rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
40 | nam nil, pariter.
41 |
42 | Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
43 | aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
44 | sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
45 | oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
46 |
47 | Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
48 | _gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
49 | quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
50 | respice humum vobis oscula, in Lotis nymphae.
51 |
52 | Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
53 | Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
54 | capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
55 | ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
56 | visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
57 | porrigar **patriam** Alcmene: attonitas.
58 |
--------------------------------------------------------------------------------
/posts/tailwind-vs-bootstrap.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Tailwind vs. Bootstrap'
3 | date: 'March 5, 2021'
4 | excerpt: 'Both Tailwind and Bootstrap are very popular CSS frameworks. In this article, we will compare them'
5 | cover_image: '/images/posts/img2.jpg'
6 | ---
7 |
8 | Lorem markdownum fine incustoditam unda factura versum occuluere Aeneas, iuvat
9 | haec praepes [partes epulae](http://cui.com/), in egisse de. Caecisque ter
10 | manus. Munere in exhalat, ferre sed [habe quaeque saepe](http://ne.org/fretum)
11 | verba caput ferarum _nubila_? Patriam Cyparisse tamen, **saxum** fide postponere
12 | pavida ne omnes etiam, atque. Sonuit omina sed sine haerebat illic fit a mora
13 | in.
14 |
15 | 1. Serrae enim Etruscam aquis
16 | 2. Et premis et flumine frontem minatur oppressos
17 | 3. Inquam rector Icarus possum vim tumulo propiusque
18 | 4. Vulnus se Latreus
19 | 5. Aptumque bis
20 |
21 | ## Turpius Aegides membris colat volentes fallere
22 |
23 | Ille fida formosus, et addunt viscera perdidit ad pondere quia tellus
24 | consequitur et quoque scinditque in. Ratis laborum instabat quaedam partem
25 | Phoebus, manus _partibus poenas_. Sola armos adhuc; chaos agit ora manifesta
26 | procul fugitque corpora iugales!
27 |
28 | var ethics_font_drive = cycleSystemProgram + deprecatedTransferIp.ide(3) /
29 | rgb + nybbleBaseband;
30 | permalinkCertificateMacintosh(ergonomicsIsdnDns);
31 | boot = bridgeDaemonActive;
32 |
33 | ## O contra diu
34 |
35 | Descendit _auras cum misi_ contactu tenax lacus, **quaerensque invitum
36 | premuntur** patria. Puris ille pictis spiritus placent vestigia et noctis
37 | sceleratos laudis egere retroque. Patrem contenta magni margine satis inprudens
38 | nymphae invito verba saepe: genus sed numinis pugnat meum iterumque attonitas
39 | rursus utve. Constituit praestet liceat opprobria Medusae huius, excutiuntque
40 | nam nil, pariter.
41 |
42 | Coma **laudes manet** ausus hortaturque matrisque Veneris proximus tu iamque
43 | aptius claudit. Tmolus tetigere iussos animumque quid poplite Hippotaden? Quod
44 | sibi Spartana sidera, lupum Nereusque quoque ramum, vertuntur Peleus Amuli
45 | oscula: tamen. Surgere Epidaurius movit crede soceri Euboicam quoque.
46 |
47 | Unde stabant, acuta, percussit denique; hoc illic et herbis minimas parvum? Quid
48 | _gemino profectus et_ dici postquam tot; aquarum quod relanguit est si
49 | quodcumque. Ossaque protinus, quod somno est, repetit, hoc passu est. Qui devia;
50 | respice humum vobis oscula, in Lotis nymphae.
51 |
52 | Dolet certamina velle dexteriore mutatus saepe, tellure ubi unguibus, gestu.
53 | Illis cuius finem Sirenes adsueta stridore, pictas quo edidit, nec utque et
54 | capillos ego rapi Bootes, sculpsit. Protinus sibi denique sibi primum Acheloides
55 | ante exspectant gaudeat Calydonius cernit, duxit pariterque dolet epulis? Nostri
56 | visae nisi aeripedes stant quem saepibus cannis protectus candens praestet:
57 | porrigar **patriam** Alcmene: attonitas.
58 |
--------------------------------------------------------------------------------
/posts/writing-great-unit-tests.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 'Writing Great Unit Tests'
3 | date: 'March 12, 2021'
4 | excerpt: 'We will look at 10 simple tips and tricks on writing unit tests in JavaScript'
5 | cover_image: '/images/posts/img7.jpg'
6 | ---
7 |
8 | Lorem [markdownum](http://insunt.org/inpositaque), et sanguine rutilos dixit
9 | nigro cornu genus duris linguae. Super hic deus ego adveniens nullumque Venerem
10 | equis aurem aliisque celare densis dextramque similis **post**: mihi rexerat;
11 | bis.
12 |
13 | 1. Scinditur annos
14 | 2. Talia verba
15 | 3. Habet delata villis domui
16 | 4. Geminum viscere deum et utque
17 |
18 | ## Magnorum nulla avertit pedem neque monimenta terram
19 |
20 | Quo numquam, nunc [concussaque](http://mox-cunctos.net/), hora effugit mihi,
21 | pectore. Hinc fausto, circumspicit cadas; virilibus rapui, timidum rorat cuique
22 | animorum ac! Quem sit. Venit qui, rex sibi tota, peto _fortis ira suis_ dolusque
23 | simulatque [incipit crudelesque
24 | pavens](http://www.corpora.com/terrae-oscula.html) spatiosa conlegit oscula
25 | equam.
26 |
27 | ## Mensis idem
28 |
29 | Caelestia Ganymedes gentis. Veni inpellit publica tecta bellaque mortali loca
30 | _mea gente_ qui Enipeus iramque et hoc. _Altera Rex vetitum_; hoc magis dolores
31 | precor nec. Ubi verba, et aras regia, cognoscere vites tempusque expers, heros?
32 |
33 | ## Mihi puto pallorem
34 |
35 | Hac forma, habeo quam et patria, ille tulit volat quamquam vulnus, aere est.
36 | Ignis sequerere membra Pirithoo: caruerunt saevumque, sumus, ignesque poterit
37 | intus de fonte.
38 |
39 | ## Quondam montibus tua spes consilioque nata consilioque
40 |
41 | Abigitque limite. Ipsa levis extulit munera, litora, ira pavet in morte, **te
42 | in** quas [vix](http://auxiliumquefando.net/vocibus-cum). Mitis tinxit, modus
43 | promissa **ne volucris** simul genetrixque Iovis in deae modo **in** des.
44 | _Memini isto hostilia_ Aeneas, in ponto **nova eventu cetera** iugum animam
45 | ille, viro, nec. Loquendi aves insisto saecula premente nec, at ego poscit ubi
46 | sub!
47 |
48 | - Tristis natorum ora talia patriis famae naidas
49 | - Deus scilicet male miliaque noctisque invenio Nilum
50 | - Efficerentque devexaque foret haec leve ab fertilis
51 |
52 | Institerat quantum facies parientem, crepitantis nondum. Atque atris arcebat
53 | factis nil Lucina mori sinu est partibus specie, imo interea tellus luctu
54 | inmunitamque genus Amphitryoniaden?
55 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/favicon.ico
--------------------------------------------------------------------------------
/public/images/posts/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img1.jpg
--------------------------------------------------------------------------------
/public/images/posts/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img2.jpg
--------------------------------------------------------------------------------
/public/images/posts/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img3.jpg
--------------------------------------------------------------------------------
/public/images/posts/img4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img4.jpg
--------------------------------------------------------------------------------
/public/images/posts/img5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img5.jpg
--------------------------------------------------------------------------------
/public/images/posts/img6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img6.jpg
--------------------------------------------------------------------------------
/public/images/posts/img7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradtraversy/next-markdown-blog/d0887306a7b1965f93954e409e1c60dd86ba58d1/public/images/posts/img7.jpg
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/styles/globals.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400&display=swap');
2 |
3 | * {
4 | box-sizing: border-box;
5 | margin: 0;
6 | padding: 0;
7 | }
8 |
9 | body {
10 | font-family: 'Poppins', sans-serif;
11 | }
12 |
13 | p {
14 | margin: 15px 0;
15 | line-height: 1.8;
16 | }
17 |
18 | a {
19 | text-decoration: none;
20 | color: #333;
21 | }
22 |
23 | img {
24 | width: 100%;
25 | border-radius: 10px;
26 | }
27 |
28 | header {
29 | background: steelblue;
30 | color: #fff;
31 | padding: 5px;
32 | margin-bottom: 40px;
33 | }
34 |
35 | header a {
36 | color: #fff;
37 | }
38 |
39 | .container {
40 | max-width: 768px;
41 | margin: auto;
42 | overflow: auto;
43 | padding: 0 10px;
44 | }
45 |
46 | .btn {
47 | display: inline-block;
48 | background: steelblue;
49 | color: #fff;
50 | border: none;
51 | padding: 8px 16px;
52 | border-radius: 5px;
53 | cursor: pointer;
54 | text-decoration: none;
55 | font-size: 15px;
56 | font-family: inherit;
57 | }
58 |
59 | .btn:focus {
60 | outline: none;
61 | }
62 |
63 | .btn:hover {
64 | transform: scale(0.98);
65 | }
66 |
67 | .btn-back {
68 | background: #f4f4f4;
69 | color: #000;
70 | margin-bottom: 20px;
71 | }
72 |
73 | .posts {
74 | display: grid;
75 | grid-template-columns: repeat(2, 1fr);
76 | gap: 30px;
77 | margin-top: 30px;
78 | }
79 |
80 | .card {
81 | padding: 15px;
82 | border-radius: 10px;
83 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
84 | }
85 |
86 | .card-page {
87 | padding: 15px 30px;
88 | }
89 |
90 | .post-title {
91 | margin: 10px 0;
92 | }
93 |
94 | .post-date {
95 | background: #f4f4f4;
96 | margin-bottom: 20px;
97 | padding: 3px 10px;
98 | }
99 |
100 | .post-body ul,
101 | ol {
102 | font-size: 110%;
103 | line-height: 2.3;
104 | font-weight: bold;
105 | margin: 10px 0;
106 | }
107 |
108 | .post-body pre {
109 | background: #f4f4f4;
110 | padding: 20px;
111 | margin: 20px 0;
112 | line-height: 2.3;
113 | }
114 |
115 | @media (max-width: 500px) {
116 | .posts {
117 | grid-template-columns: 1fr;
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/utils/index.js:
--------------------------------------------------------------------------------
1 | export const sortByDate = (a, b) => {
2 | return new Date(b.frontmatter.date) - new Date(a.frontmatter.date)
3 | }
4 |
--------------------------------------------------------------------------------