diff --git a/assets/images/blog/blog-2.jpg b/assets/images/blog/blog-2.jpg index 2fcaedc..082e264 100644 Binary files a/assets/images/blog/blog-2.jpg and b/assets/images/blog/blog-2.jpg differ diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico new file mode 100644 index 0000000..2fd50d4 Binary files /dev/null and b/assets/images/favicon.ico differ diff --git a/assets/images/favicon.png b/assets/images/favicon.png index d1f1382..ad073d5 100644 Binary files a/assets/images/favicon.png and b/assets/images/favicon.png differ diff --git a/content/_index.md b/content/_index.md index dbea08a..b13a93d 100644 --- a/content/_index.md +++ b/content/_index.md @@ -26,7 +26,7 @@ banner: enable: true label: "Download Resume" isDownloadable: true - link: "http://cdn.alpin.sbs/resume.pdf" + link: "https://cdn.joren.blog/resume.pdf" # skill diff --git a/content/blog/post-1.md b/content/blog/post-1.md index d68bf29..fb166b8 100644 --- a/content/blog/post-1.md +++ b/content/blog/post-1.md @@ -7,8 +7,6 @@ categories: ["cybersecurity", "event"] draft: false --- -#### On a Mission with NATO: Cyber Defence on the Frontline - Howest’s ongoing commitment to world-class cybersecurity training took center stage again as six lecturers from the Cyber Security program joined forces with experts from Latvia, Luxembourg and Belgium in one of NATO's most intensive simulations: the Locked Shields exercise, hosted by the Cooperative Cyber Defence Centre of Excellence (CCDCOE). Now in its fifth year of participation, the Howest team shared their firsthand experiences at a special evening talk at Howest Bruges. #### The Exercise: Locked Shields diff --git a/content/blog/post-10.md b/content/blog/post-10.md index d0165ee..c5ed6c2 100644 --- a/content/blog/post-10.md +++ b/content/blog/post-10.md @@ -14,7 +14,7 @@ Smart homes are convenient. But with convenience comes risk. If your doorbell ru --- -### Why Segmentation Matters +#### Why Segmentation Matters Most people treat their home network like a trust zone. All devices are equal. But they’re not. You wouldn’t let your robot vacuum log into your online banking, yet they live on the same flat LAN. That’s the fundamental issue. @@ -29,7 +29,7 @@ A compromise is inevitable. The only question is: does that compromise stay loca --- -### VLANs 101 +#### VLANs 101 A VLAN (Virtual Local Area Network) logically segments traffic on the same physical infrastructure. Think of it as creating isolated “subnet bubbles” where traffic can be controlled and filtered. @@ -44,7 +44,7 @@ And you don’t need enterprise gear to do this. Many consumer-grade routers and --- -### Sample Home Setup +#### Sample Home Setup Let’s say you have a smart home with: @@ -80,7 +80,7 @@ Optional: Use static DHCP leases and force DNS through Pi-hole for logging and f --- -### Real-World Examples +#### Real-World Examples **Case 1: Smart TV** @@ -100,7 +100,7 @@ On the LAN, it had access to the NAS and router UI. After VLAN isolation, its ac --- -### Caveats & Limitations +#### Caveats & Limitations * Some IoT devices rely on MDNS or SSDP for pairing/setup. Consider temporarily whitelisting during setup, then blocking. * Chromecast-style devices need special rules if you want casting from your main network. @@ -111,7 +111,7 @@ Still, the benefits far outweigh the complexity. --- -### Final Thoughts +#### Final Thoughts If you’ve ever installed a smart plug and noticed it phones home every few minutes, you're not alone. And if you haven't noticed, maybe you should. diff --git a/content/blog/post-2.md b/content/blog/post-2.md index c68affd..a6aeb80 100644 --- a/content/blog/post-2.md +++ b/content/blog/post-2.md @@ -1,6 +1,6 @@ --- title: "Reversing, Rebuilding, and Failing Better: My Cyber Security Challenge Belgium Qualifier Experience" -image: "images/blog/post-2/binexpl.png" +image: "images/blog/blog-2.jpg" date: "2025-03-15 00:00:00 +0000 UTC" description: "I tackled buffer overflows, reversed Android apps, cracked crypto puzzles, and solved a 'one-in-a-million' guessing game, but the challenge that stuck with me was rebuilding a fragmented DEX in memory." categories: ["cybersecurity", "CTF", "education"] diff --git a/content/blog/post-9.md b/content/blog/post-9.md index 7cf11f1..f0eec23 100644 --- a/content/blog/post-9.md +++ b/content/blog/post-9.md @@ -50,4 +50,3 @@ Priced under 150 EUR, the SARV001 offers features typically found in higher-end The Seiko SARV001 exemplifies the brand's commitment to craftsmanship and value. Its understated design, robust movement, and unique JDM characteristics make it a compelling option for those looking to add a versatile and reliable watch to their collection. ---- diff --git a/content/project/project-1.md b/content/project/project-1.md index 2d42908..bc836ee 100644 --- a/content/project/project-1.md +++ b/content/project/project-1.md @@ -30,12 +30,12 @@ A `.drmd` file is a structured JSON document that defines one or more encrypted Each item includes: -* **MPD**: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. -* **Keys**: A comma-separated list of **KID\:key** pairs (e.g., `abcd1234ef567890:00112233445566778899aabbccddeeff`). These are required for decrypting encrypted media streams and are passed directly to N\_m3u8DL-RE using `--key` flags. -* **Filename**: The name to be used for the final output file. -* **Subtitles**: Comma-separated list of subtitle URLs in `.vtt` format. DRMDTool downloads and converts these to `.srt`, then muxes them into the final file. -* **Metadata**: A semicolon-separated string like `Title;Type;Season` (e.g., `Example Show;serie;1`) used to determine directory structure (`Movies/Title` or `Series/Title/Season`). -* **Description** and **Poster**: Optional fields used only for display in the web UI. +* MPD: A DASH manifest, either a direct URL or a base64-encoded version. If base64-encoded, DRMDTool decodes and temporarily saves it before use. +* Keys: A comma-separated list of **KID\:key** pairs (e.g., `abcd1234ef567890:00112233445566778899aabbccddeeff`). These are required for decrypting encrypted media streams and are passed directly to N\_m3u8DL-RE using `--key` flags. +* Filename: The name to be used for the final output file. +* Subtitles: Comma-separated list of subtitle URLs in `.vtt` format. DRMDTool downloads and converts these to `.srt`, then muxes them into the final file. +* Metadata**: A semicolon-separated string like `Title;Type;Season` (e.g., `Example Show;serie;1`) used to determine directory structure (`Movies/Title` or `Series/Title/Season`). +* Description and Poster: Optional fields used only for display in the web UI. ##### Example `.drmd` Structure @@ -57,11 +57,11 @@ Each item includes: #### Processing Steps -1. **Detection**: DRMDTool either watches a folder or receives `.drmd` uploads through the web UI. -2. **Validation**: It waits for the file to finish writing (based on file size stability), then parses its contents. -3. **MPD Handling**: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. -4. **Command Generation**: Using the MPD, `KID:key` pairs, output paths, and subtitles, DRMDTool builds a command line for N\_m3u8DL-RE. -5. **Execution**: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. +1. Detection: DRMDTool either watches a folder or receives `.drmd` uploads through the web UI. +2. Validation: It waits for the file to finish writing (based on file size stability), then parses its contents. +3. MPD Handling: If base64-encoded, the MPD is decoded and written to a temp file; otherwise, the URL is fetched or passed as-is. +4. Command Generation: Using the MPD, `KID:key` pairs, output paths, and subtitles, DRMDTool builds a command line for N\_m3u8DL-RE. +5. Execution: The download is launched with live progress tracking. Users can pause, resume, or abort jobs, and optionally stream console output via WebSocket. These files serve as portable job definitions. When DRMDTool detects or receives a `.drmd` file, it parses the items, decodes or downloads the MPD, applies the keys, and builds a download command using N\_m3u8DL-RE. Files are saved in organized directories like `Movies/Title` or `Series/Title/Season`, and subtitles are embedded if available. Pausing, resuming, and aborting downloads is supported per file. diff --git a/content/project/project-3.md b/content/project/project-3.md index a3fd3cb..6598d2f 100644 --- a/content/project/project-3.md +++ b/content/project/project-3.md @@ -31,7 +31,7 @@ Blocky handles all local DNS queries, with DoT upstreams, custom mappings, and d Highlights: -* Local resolution for custom domains like `directme.in` +* Local resolution for custom domains like `joren.blog` * Cloudflare, Google as upstream resolvers * Per-IP blocking rules * Prometheus metrics for monitoring @@ -48,7 +48,7 @@ blocking: clientGroupsBlock: default: - ads - 192.168.178.123: + 172.16.0.120: - vtm ``` @@ -83,8 +83,6 @@ In this context, PiVPN reduces the friction of managing WireGuard while remainin --- ---- - #### IRC: ngIRCd For real-time messaging, I run a public-facing **ngIRCd** instance accessible over both plaintext (port 6667) and encrypted TLS (ports 6697, 6698). Despite its modest footprint, *ngIRCd* is stable, portable, and well-suited for both LAN and internet-facing deployments. diff --git a/content/project/project-4.md b/content/project/project-4.md index 12c038d..f21b446 100644 --- a/content/project/project-4.md +++ b/content/project/project-4.md @@ -1,6 +1,6 @@ --- -title: "Sniffing on a Budget: Malware Detection with Suricata and Alpine Linux" +title: "Network Sniffing on a Budget: Malware Detection with Suricata" image: "/images/project/project-4.jpg" date: "2025-04-15 00:00:00 +0000 UTC" description: "Setting up Suricata on minimal hardware to passively inspect mirrored traffic for malware and exploits using open threat intelligence rules." diff --git a/hugo_stats.json b/hugo_stats.json index 233cd53..abeeb5e 100644 --- a/hugo_stats.json +++ b/hugo_stats.json @@ -204,12 +204,10 @@ "p-0", "p-1", "p-2", - "p-3", "p-4", "pb-1", "pb-2", "pb-3", - "pb-4", "pb-5", "pe-3", "position-fixed", @@ -221,7 +219,6 @@ "progress-bar", "progress-item", "progress-value", - "project-item", "projects", "ps-0", "ps-lg-4", @@ -321,7 +318,6 @@ "name-resolution-chaos", "navbar", "offensive-vs-defensive-security", - "on-a-mission-with-nato-cyber-defence-on-the-frontline", "ourencissec-zip-bombs-and-oeis", "phone", "portfolio", diff --git a/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.content b/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.content index a9a083f..6652f2b 100644 --- a/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.content +++ b/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.content @@ -18314,46 +18314,6 @@ html.light .navbar-nav .nav-item a.nav-link:hover { max-height: 600px; object-fit: cover; } -.project-item { - display: flex; - flex-direction: column; - height: 100%; } - -.project-item > a { - position: relative; - overflow: hidden; - border-radius: 8px; - display: block; - width: 100%; - aspect-ratio: 16 / 9; } - -.project-item > a img { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center; - display: block; - transition: transform 0.4s ease; } - -.project-item > a:hover img { - transform: scale(1.05); } - -.project-item h3, .project-item .h3 { - min-height: 3.5em; - margin-bottom: 1rem; - font-size: 1.125rem; - font-weight: 500; } - -.project-item .card-text { - flex-grow: 1; - font-size: 0.95rem; - line-height: 1.6; - margin-bottom: 1rem; } - -.project-item .card-btn { - font-weight: 500; - margin-top: auto; } - #blog { position: relative; } #blog::before { diff --git a/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.json b/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.json index 0096973..a8c7923 100644 --- a/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.json +++ b/resources/_gen/assets/css/style.css_962af1a1afce5ddc72958e59b4fec1ad.json @@ -1 +1 @@ -{"Target":"/css/style.e0f0e604485dadc53beafefb6a6887ddbbfd8348186bc86d1fc9e99ad8162ccd.css","MediaType":"text/css","Data":{"Integrity":"sha256-4PDmBEhdrcU76v77amiH3bv9g0gYa8htH8npmtgWLM0="}} \ No newline at end of file +{"Target":"/css/style.30c2f870a09379db333105ec31b030d3bad723d3ad8e71a83f60db00f48d4f85.css","MediaType":"text/css","Data":{"Integrity":"sha256-MML4cKCTedszMQXsMbAw07rXI9OtjnGoP2DbAPSNT4U="}} \ No newline at end of file diff --git a/resources/_gen/assets/scss/style.scss_d9077b5cab49df084fb1a39ad4b1e75d.content b/resources/_gen/assets/scss/style.scss_d9077b5cab49df084fb1a39ad4b1e75d.content index 51f2b37..0da6a53 100644 --- a/resources/_gen/assets/scss/style.scss_d9077b5cab49df084fb1a39ad4b1e75d.content +++ b/resources/_gen/assets/scss/style.scss_d9077b5cab49df084fb1a39ad4b1e75d.content @@ -8817,46 +8817,6 @@ html.light .navbar-nav .nav-item a.nav-link:hover { max-height: 600px; object-fit: cover; } -.project-item { - display: flex; - flex-direction: column; - height: 100%; } - -.project-item > a { - position: relative; - overflow: hidden; - border-radius: 8px; - display: block; - width: 100%; - aspect-ratio: 16 / 9; } - -.project-item > a img { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center; - display: block; - transition: transform 0.4s ease; } - -.project-item > a:hover img { - transform: scale(1.05); } - -.project-item h3, .project-item .h3 { - min-height: 3.5em; - margin-bottom: 1rem; - font-size: 1.125rem; - font-weight: 500; } - -.project-item .card-text { - flex-grow: 1; - font-size: 0.95rem; - line-height: 1.6; - margin-bottom: 1rem; } - -.project-item .card-btn { - font-weight: 500; - margin-top: auto; } - #blog { position: relative; } #blog::before { diff --git a/resources/_gen/images/images/blog/blog-2_hu_1bf7cfeb636d7cca.webp b/resources/_gen/images/images/blog/blog-2_hu_1bf7cfeb636d7cca.webp new file mode 100644 index 0000000..466bf81 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_1bf7cfeb636d7cca.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_3af01dc64621d35d.webp b/resources/_gen/images/images/blog/blog-2_hu_3af01dc64621d35d.webp new file mode 100644 index 0000000..40166c2 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_3af01dc64621d35d.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_3bff2ce53c36bd3b.webp b/resources/_gen/images/images/blog/blog-2_hu_3bff2ce53c36bd3b.webp new file mode 100644 index 0000000..ddd425c Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_3bff2ce53c36bd3b.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_429e94682bb22e3c.webp b/resources/_gen/images/images/blog/blog-2_hu_429e94682bb22e3c.webp new file mode 100644 index 0000000..7137bf6 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_429e94682bb22e3c.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_57390d5858ed789.jpg b/resources/_gen/images/images/blog/blog-2_hu_57390d5858ed789.jpg new file mode 100644 index 0000000..fb8caaa Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_57390d5858ed789.jpg differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_6319adac0914f06e.webp b/resources/_gen/images/images/blog/blog-2_hu_6319adac0914f06e.webp new file mode 100644 index 0000000..324dcd5 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_6319adac0914f06e.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_63cdc181a41948b9.webp b/resources/_gen/images/images/blog/blog-2_hu_63cdc181a41948b9.webp new file mode 100644 index 0000000..bd70a74 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_63cdc181a41948b9.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_672cb15fee3825f0.jpg b/resources/_gen/images/images/blog/blog-2_hu_672cb15fee3825f0.jpg new file mode 100644 index 0000000..9dae17f Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_672cb15fee3825f0.jpg differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_728150f6097443fa.jpg b/resources/_gen/images/images/blog/blog-2_hu_728150f6097443fa.jpg new file mode 100644 index 0000000..cc1084b Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_728150f6097443fa.jpg differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_858e267f632243da.webp b/resources/_gen/images/images/blog/blog-2_hu_858e267f632243da.webp new file mode 100644 index 0000000..e21ae2f Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_858e267f632243da.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_89c109e000ed8c9.webp b/resources/_gen/images/images/blog/blog-2_hu_89c109e000ed8c9.webp new file mode 100644 index 0000000..9346cb1 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_89c109e000ed8c9.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_9f875c2f58006099.jpg b/resources/_gen/images/images/blog/blog-2_hu_9f875c2f58006099.jpg new file mode 100644 index 0000000..b36a83b Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_9f875c2f58006099.jpg differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_a9131f62b85b7acc.webp b/resources/_gen/images/images/blog/blog-2_hu_a9131f62b85b7acc.webp new file mode 100644 index 0000000..2acfff9 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_a9131f62b85b7acc.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_ae22ee6b650bfda2.jpg b/resources/_gen/images/images/blog/blog-2_hu_ae22ee6b650bfda2.jpg new file mode 100644 index 0000000..83cee6a Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_ae22ee6b650bfda2.jpg differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_c68f9ef6f7a5268d.webp b/resources/_gen/images/images/blog/blog-2_hu_c68f9ef6f7a5268d.webp new file mode 100644 index 0000000..4f6833d Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_c68f9ef6f7a5268d.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_c748b371f0646495.webp b/resources/_gen/images/images/blog/blog-2_hu_c748b371f0646495.webp new file mode 100644 index 0000000..1ac0737 Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_c748b371f0646495.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_f3c48a70efb76c66.webp b/resources/_gen/images/images/blog/blog-2_hu_f3c48a70efb76c66.webp new file mode 100644 index 0000000..c9783be Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_f3c48a70efb76c66.webp differ diff --git a/resources/_gen/images/images/blog/blog-2_hu_ff94104312b8127f.webp b/resources/_gen/images/images/blog/blog-2_hu_ff94104312b8127f.webp new file mode 100644 index 0000000..ed8542e Binary files /dev/null and b/resources/_gen/images/images/blog/blog-2_hu_ff94104312b8127f.webp differ diff --git a/resources/_gen/images/images/favicon_hu_3e8ef64f51702173.png b/resources/_gen/images/images/favicon_hu_3e8ef64f51702173.png new file mode 100644 index 0000000..f633a44 Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_3e8ef64f51702173.png differ diff --git a/resources/_gen/images/images/favicon_hu_44e6c8b37eb36d59.png b/resources/_gen/images/images/favicon_hu_44e6c8b37eb36d59.png new file mode 100644 index 0000000..7fb03b2 Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_44e6c8b37eb36d59.png differ diff --git a/resources/_gen/images/images/favicon_hu_6c15ef0eeacaf617.png b/resources/_gen/images/images/favicon_hu_6c15ef0eeacaf617.png new file mode 100644 index 0000000..adf7f35 Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_6c15ef0eeacaf617.png differ diff --git a/resources/_gen/images/images/favicon_hu_80c72ef352d70226.png b/resources/_gen/images/images/favicon_hu_80c72ef352d70226.png new file mode 100644 index 0000000..5b0876d Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_80c72ef352d70226.png differ diff --git a/resources/_gen/images/images/favicon_hu_ad05c28a032bed34.png b/resources/_gen/images/images/favicon_hu_ad05c28a032bed34.png new file mode 100644 index 0000000..7fb03b2 Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_ad05c28a032bed34.png differ diff --git a/resources/_gen/images/images/favicon_hu_baf4ac5f8b02350c.png b/resources/_gen/images/images/favicon_hu_baf4ac5f8b02350c.png new file mode 100644 index 0000000..adf7f35 Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_baf4ac5f8b02350c.png differ diff --git a/resources/_gen/images/images/favicon_hu_be7dfdbacefd23c7.png b/resources/_gen/images/images/favicon_hu_be7dfdbacefd23c7.png new file mode 100644 index 0000000..b7b014b Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_be7dfdbacefd23c7.png differ diff --git a/resources/_gen/images/images/favicon_hu_d11aaba54c3c98fd.png b/resources/_gen/images/images/favicon_hu_d11aaba54c3c98fd.png new file mode 100644 index 0000000..b7b014b Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_d11aaba54c3c98fd.png differ diff --git a/resources/_gen/images/images/favicon_hu_d8371c65696cde6b.png b/resources/_gen/images/images/favicon_hu_d8371c65696cde6b.png new file mode 100644 index 0000000..193fced Binary files /dev/null and b/resources/_gen/images/images/favicon_hu_d8371c65696cde6b.png differ diff --git a/themes/professors-hugo/assets/scss/templates/_main.scss b/themes/professors-hugo/assets/scss/templates/_main.scss index f4eaff2..b4087fa 100755 --- a/themes/professors-hugo/assets/scss/templates/_main.scss +++ b/themes/professors-hugo/assets/scss/templates/_main.scss @@ -311,6 +311,7 @@ } } + .project-item, .blog-post { .card { @@ -442,53 +443,7 @@ object-fit: cover; } -.project-item { - display: flex; - flex-direction: column; - height: 100%; -} -.project-item > a { - position: relative; - overflow: hidden; - border-radius: 8px; - display: block; - width: 100%; - aspect-ratio: 16 / 9; -} - -.project-item > a img { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center; - display: block; - transition: transform 0.4s ease; -} - -.project-item > a:hover img { - transform: scale(1.05); -} - - -.project-item h3 { - min-height: 3.5em; // equal height titles - margin-bottom: 1rem; - font-size: 1.125rem; - font-weight: 500; -} - -.project-item .card-text { - flex-grow: 1; - font-size: 0.95rem; - line-height: 1.6; - margin-bottom: 1rem; -} - -.project-item .card-btn { - font-weight: 500; - margin-top: auto; -} // ----------------------- diff --git a/themes/professors-hugo/layouts/_default/list.html b/themes/professors-hugo/layouts/_default/list.html index ac67d3d..770cc1c 100644 --- a/themes/professors-hugo/layouts/_default/list.html +++ b/themes/professors-hugo/layouts/_default/list.html @@ -1,7 +1,7 @@ {{define "main"}} -{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") }} +{{ if or (eq .Section "post") (eq .Section "posts") (eq .Section "blog") (eq .Section "blogs") (eq .Section "news") (eq .Section "categories") (eq .Section "tags") (eq .Section "project") }}
@@ -40,4 +40,4 @@ {{ end }} -{{end}} \ No newline at end of file +{{end}} diff --git a/themes/professors-hugo/layouts/_default/project-card.html b/themes/professors-hugo/layouts/_default/project-card.html index 70ebfb1..d0db0de 100644 --- a/themes/professors-hugo/layouts/_default/project-card.html +++ b/themes/professors-hugo/layouts/_default/project-card.html @@ -1,18 +1,40 @@ -
- {{ if .Params.image }} - - {{ partial "image.html" (dict "Src" .Params.image "Alt" .Params.title "Class" "rounded-2 w-100") }} - - {{ end }} -
-

- {{ .Params.title | markdownify }} -

-

{{ .Params.description | truncate 115 }}

-
+
+
diff --git a/themes/professors-hugo/layouts/index.html b/themes/professors-hugo/layouts/index.html index 86a78e2..0f36314 100755 --- a/themes/professors-hugo/layouts/index.html +++ b/themes/professors-hugo/layouts/index.html @@ -259,7 +259,7 @@
- {{ range .Pages.ByDate.Reverse }} + {{ range first 6 .Pages.ByDate.Reverse }} {{ .Render "project-card" }} {{ end }}
@@ -293,7 +293,7 @@
- {{ range .Pages.ByDate.Reverse }} + {{ range first 6 .Pages.ByDate.Reverse }} {{ .Render "blog-card" }} {{ end }}
diff --git a/themes/professors-hugo/layouts/project/list.html b/themes/professors-hugo/layouts/project/list.html index dc6847a..9dab541 100644 --- a/themes/professors-hugo/layouts/project/list.html +++ b/themes/professors-hugo/layouts/project/list.html @@ -1,42 +1,25 @@ -{{define "main"}} +{{ define "main" }}
- {{ if or (eq .Section "categories") (eq .Section "tags") }} -

Category

- {{ end }} -

//{{.Title | title}}

+

+ //{{ .Title | title }} +

- -
- {{range .Data.Pages}} -
-
- {{if .Params.image}} - - {{ partial "image.html" (dict "Src" .Params.image "Alt" .Params.title "Class" `rounded-2`) }} - - {{ end }} -
-
-

- {{.Params.title | markdownify}} -

-

{{.Params.description | truncate 115}}

- Discover -
-
-
-
+
+ {{ range .Pages }} + {{ .Render "project-card" }} {{ end }}
+
-{{end}} \ No newline at end of file +{{ end }} + diff --git a/themes/professors-hugo/layouts/project/single.html b/themes/professors-hugo/layouts/project/single.html old mode 100755 new mode 100644 index 68a151a..33a2cfb --- a/themes/professors-hugo/layouts/project/single.html +++ b/themes/professors-hugo/layouts/project/single.html @@ -29,4 +29,4 @@
-{{ end }} \ No newline at end of file +{{ end }}