4 ms·
Ask HN: What's your blog / portfolio stack?
Many people here post in some frequencies on their sites.
I wonder what kind of frameworks you are using and what you can recommend.
In a shared web hosting environment I'm building a React site myself, but found myself not updating it as much as I can't build on the go and am thinking about returning to a classic CMS solution.
Even though I dislike all the clutter WordPress comes with, I'm used to it after all these years.
- anon291 2y agoHakyll + CI.
- _mitterpach 2y agoIt really depends on how deep you want to go, but the usual answer would be writing in Markdown and using Jekyll in combination with GitHub pages to present. This gives you a large amount of control and can be basically hosted for free, maybe the price of a domain. You can really get a lot out of this simple stack.
- quintes 2y agoJekyl, git repo, branch on commit will build and deploy to AWS S3 cloudfront
- ip7e 2y ago[dead]
- asicsp 2y agoI write in Markdown and use Zola (https://github.com/getzola/zola https://github.com/getzola/zola) to convert for publishing via GitHub Pages.
- CER10TY 2y agoSvelteKit + Netlify. The editing workflow for my blog is slightly cumbersome, because I write locally in Obsidian (just in case I ever redesign my website again, nothing is lost) and then copy/paste into VSCode, then publish. Once it's published, Brevo automatically picks up the RSS Feed to send out my daily newsletter, since I switched from long-form sporadic blog posts to a shorter-form daily newsletter. I've used Hugo/Jekyll in the past and liked it, but I'm used to SvelteKit now so I just stick with it, plus I could always hook up a Headless CMS still if necessary.
- eamag 2y agohttps://quartz.jzhao.xyz/ https://quartz.jzhao.xyz/ + cloudflare, write in obsidian and publish with a git push
- boricj 2y agoIt's a static website built with Jekyll. I'm serving it with NGINX from a DMZ container on a Proxmox instance located inside my apartment. I might migrate to Hugo or another static site generator at some point because I'm too lazy to commit the Ruby/Gem stuff to long-term memory and I'm not using it for anything else.
- chistev 2y agohttps://rxjourney.com.ng https://rxjourney.com.ng A personal blog. Stack is Django server and Sveltekit for the frontend. I could have just used Django for everything, but I initially had bigger plans for the blog with lots of interactivity, I ended up just keeping it simple.
- junto 2y agoAstro SSG deployed on git commit trigger to CloudFlare Pages. I write my content in markdown and commit to GitHub. Astro does the work on generating the static site. 100 score on PageSpeed Insights. And apart from the domain, it’s free.
- nils-m-holm 2y agoStatic HTML. Hand-written up to 2025, generated from homebrew markdown since this year. http://t3x.org http://t3x.org
- skwee357 2y agoI run multiple blogs, although post somewhat actively in one [0]. It uses Astro SSG, deployed to netlify. I want to eventually move to deploy on Hetzner VPS via GitLab CI/CD. [0] https://yieldcode.blog/ https://yieldcode.blog/
- donatj 2y agoI am on a very strange php sort-of-cms framework I built originally for a long out of business medical freelancer website like fifteen years ago. If I am remembering correctly I sort of built both at the same time. It's not anything anyone would build today, and I would not recommend it to anyone, but it does have some very interesting properties that make some things that are often difficult very easy. Embedding dynamic content mid-article for instance is very easy because of a processing pass before a page gets handed to the view. It has a concept of ordered content filters, so by post I can declare what filters get applied and in what order. Filters include markdown parsing, as well as a syntax for injecting dynamic elements. It's kind of my Frankenstein's monster at this point, but as an tinkerer I enjoy maintaining it. If I didn't enjoy it, I would have switched to something sane years ago. https://donatstudios.com/ https://donatstudios.com/
- hiAndrewQuinn 2y agoHugo! I stick with Hugo for all things SSG these days. I like how it's a single binary, runs uber-fast, and compiles down to a nice clean set of HTML, CSS, and JS (if needed - for my needs it usually isn't). My one mark against it is the learning curve is sharp. That's okay for me, since I plan to use it to the end of my days, and so I can amortize the cost of learning it once against many decades of productivity. I have an old GitHub page for people struggling to get to base camp on its learning curve: https://github.com/Siilikuin/minimum-viable-hugo https://github.com/Siilikuin/minimum-viable-hugo And here are some sites I run in it: https://andrew-quinn.me/ https://andrew-quinn.me/, my barebones personal blog. https://hiandrewquinn.github.io/til-site/ https://hiandrewquinn.github.io/til-site/, my much more frequently updated TILs. Think of this as halfway between a blog and Twitter. https://hiandrewquinn.github.io/selkouutiset-archive/ https://hiandrewquinn.github.io/selkouutiset-archive/, a daily updating news archive for the Simple Finnish broadcast, happily running since 2023. The pipeline for this one is interesting, since it uses not only Hugo but Git submodules under the hood. One Git repo exists purely to curl the page I'm watching every night, and I try to mess with that one as little as possible because messing up might mean a night goes unarchived. An intermediate one submodules repo #1 and cleans up the HTML to Hugo-friendly Markdown with pandoc and sed. The final one imports this slimmed down, Markdownified version directly into its content/ directory as a Git submodule and redeploys the whole shebang every night. So far we're up to over a thousand unique HTML pages and this refinery has continued to work with only minimal changes, because we've stuck with such reliable and slow-changing tooling.
- JohnScolaro 2y agoNext.js on Vercel. I don't get enough hits to take me out of the free tier, so I'm fine staying here for now. If it became absurdly expensive, I'd try to either self-host, or move to something else. All the blog posts are just written in markdown and would be easy to migrate, but some of the fancier stuff would be harder. Luckily if you just write drivel like me, the free tier lasts a long time https://johnscolaro.xyz https://johnscolaro.xyz
- GunjanWalecha 2y agoDesign Engineer Portfolio: Design: Figma, Excalidraw, Procreate Development: Svelte, Typescript Deployment: CF pages
- brynet 2y agoStatic HTML articles + rss embed, handmangled with vi. https://brynet.ca/ https://brynet.ca/ OpenBSD, httpd, acme-client.
- whoami_nr 2y agoGithub pages + Jekyll for the main blog. All the subdomains(mostly side projects which I have put the effort to deploy) are hosted on Replit. Blog: rnikhil.com
- wjgilmore 2y agoNextJS + Tailwind CSS and the TailwindUI (apparently now Tailwind Plus) Spotlight template. Code managed on GitHub and auto-deployed to Netlify free tier. No database, nothing to manage. Just write, commit, and push to deploy. https://wjgilmore.com https://wjgilmore.com
- andyg_blog 2y agoMarkdown that is then unceremoniously shoveled to WordPress with some finagling of the images. I'm not trying to experiment with fancy tech when I write, just trying to get the words out of my head. If something gets mathy I'll use LaTex.
- andyg_blog 2y agoYou can downvote me all you want. I'm not claiming any kind of superiority of WordPress but merely answering the question in the OP. I've had this blog for 15 years now, long before WordPress was so reviled. It just works and I'm still on their free tier.
- kepano 2y agoMarkdown files edited in Obsidian and compiled with Jekyll. https://stephango.com/vault#publishing-to-the-web https://stephango.com/vault#publishing-to-the-web
- QuadmasterXLII 2y agoSSG and github actions/github pages is the way to go in my opinion, I can edit posts from my phone using the github website. However, I’m not tied to github by this approach, I can build it on my desktop and can host the generated files anywhere. I use a julia based ssg, franklin, largely for the memes. I’m sure there are more polished/effective options out there.
- megaman0601 2y agomine is a combination of a SPA with rsbuild deploy through AWS Amplify and SSG with NextJS deploy on vercel. https://datbdo.com https://datbdo.com
- the_alphalaser 2y agoUsed a simple monospace template for my portfolio that renders Semantic HTML from markdown using Pandoc. Usually Sveltekit + Vercel for blogs and bigger projects.
- gls2ro 2y agoI use the following two options: - Jekyll => which generates static pages -> amazing to deploy it on Github Pages or any web server - Rails 8 with Sitepress => for when I want to have some extra dynamic functionality. With Rails 8 running with defaults like SQLite and import maps there is little to be done for server config/installation I prefer Markdown syntax for blogposts. It is the most "transferrable" way for blog content. Multiple other blog engines are supporting it, so if you want just to use something else, you can just take the MD files and put them there.
- SamPatt 2y agoMy site is a React front end hosted on Netlify, and the blog entries are markdown files I write in Obsidian. I also use Listmonk for my newsletter and Umami for analytics, both open source and easy to run from Pikapods. I wrote about my publishing process here: https://sampatt.com/blog/2025-02-18-Listmonk https://sampatt.com/blog/2025-02-18-Listmonk
- godzillafarts 2y agoSvelteKit. All data is just markdown files preprocessed with mdsvex. When I'm on the go I don't really do any building, I'll add/edit a markdown file, push it to the remote in a branch. Cloudflare Pages will then give me a preview environment. If I like what I see, I merge the PR and it automatically deploys to "production."
- rpac0 2y agoReact + Docusaurus Netlify & Cloudflare D3 Python (to generate Markdown files)
- akkartik 2y agohtml + css Lua (roughly https://git.sr.ht/~akkartik/gen_site https://git.sr.ht/~akkartik/gen_site) VPS Final result: https://akkartik.name https://akkartik.name
- vpai 2y agoPersonal blog: Markdown files edited with Obsidian, site built with Jekyll, hosted on Netlify Family blog: Markdown files edited with Obsidian, site built with Quartz, hosted on Cloudflare https://varunpai.com/ https://varunpai.com/
- devdri 2y agoHandwritten HTML served from a RPi and cached with CloudFlare. I wrote a custom web-based editor that lets me conveniently edit all the files from any device including mobile.
- lurn_mor 2y agoDing! This exactly. Not every web page is best expressed in Markdown (or text for that matter). I post galleries of photos, weird web experiments, tutorials with inline photos, and other odd stuff that never fits in this 'automate my .md files to www' workflows everyone seems to love. Write the html once, and it's good forever, really. Everything can be permalinked with authority. No reason to 're-render' your site again and again because you want to change the user interface - both of those are handled by CSS and JS. You need to edit? Load up your FTP editor and work on the html file live, like a leet hacker! ...but I do succumb to using S3 due to its low monthly cost for hosting my 13gb 'personal' website. Too many hosted audio files...
- drakonka 2y agoI use Hugo with GitLab CI that deploys to an S3 bucket.
- clintmcmahon 2y ago.Net Core MVC with Bootstrap CSS and a markdown file for each blog post. Github CI/CD publishes my main branch to Azure AppService. Blog: https://clintmcmahon.com https://clintmcmahon.com
- smjburton 2y agoCurrently: Ghost self-hosted in a container setup using a Hetzner VPS. Planned: Astro website with Ghost as a headless CMS, possibly using Obsidian or Outline wiki to draft posts and push to Ghost using an automation workflow like n8n.
- bitbasher 2y agoI gave up on a "blog" or portfolio after not finding it useful and didn't like the idea of handing over free data to companies to train their next pyramid scheme. When I did blog, it went through different tech eras. My biggest tech era was simply using Go and compiling the entire blog to a static binary and deploying with rsync/systemd. I then moved from Go to Rust doing the same thing (static binary, all assets/html/etc baked in).
- deleted 2y ago[deleted]
- willemlaurentz 2y agoHandwritten, vanilla HTML with a self-self built static site generator (reading the HTML files and doing some fancy 'find and replace'). Get's the job done: https://willem.com/blog/2025-03-05_durable-smartphone/ https://willem.com/blog/2025-03-05_durable-smartphone/
- horatiocain 2y agoMediawiki: https://www.johnsenner.com/index.php?title=Portfolio https://www.johnsenner.com/index.php?title=Portfolio
- vishalontheline 2y agoLinode, Linux, Sqlite3, Nginx, Elixir, Phoenix Framework and a small amount of Javascript. It works so well, that I’m working on oknext.io using the same stack .
- o1nder 2y agoBear blog! Launched on HN (I can't find the link right now) and it takes about 3 mins to set up a blog and make your first post. I had a question later on, emailed the creator and he replied the same day https://bearblog.dev https://bearblog.dev
- pyrox 2y agousing the Lume(https://lume.land https://lume.land) static site generator, which I automatically run in CI and then deploy to my VPS. All self-hosted, no middlemen, just me, my own templates, formatting, code. I focus on design simplicity, lightweight pages, and being as accessible as I can. This means both visual accessibility(Every page is hand-checked with WAVE's browser extension(https://wave.webaim.org/ https://wave.webaim.org/) and Sa11y(https://sa11y.netlify.app/ https://sa11y.netlify.app/)) and technical accessibility(Low- or no-JS always, make pages as lightweight as possible). To me, this is the ideal experience, where it's all stuff I've written, and even helped contribute to(I've been doing a lot of revising the Lume docs since the author isn't a native English speaker, been a relaxing and fun experience). Also, the entire design makes sense to me, and I haven't had that in the past with any other blog stack, so this feels like an end-game blog setup.
- pseudocomposer 2y agoI built Jonline for this purpose. I’ve now deprecated the Flutter frontend, making it a Rust BE/gRPC API/React/Redux monolith. My blog/portfolio site is at https://jonline.io https://jonline.io.
- codegeek 2y agoI wrote my own using Go, Tailwind (bought a template) and MySQL. It takes Markdown as Input and converts to HTML. It can generate static as well for deployment but I usually deploy the Go binary for now.
- ciaovietnam 2y agoI built my own CMS system which places WYSIWYG content editor in a sandboxed iframe to avoid XSS. The advantage of this approach is that I can edit HTML directly using the browser's developer console in case the WYSIWYG editor does not support what I want. After all, raw HTML/CSS codes are behind what we see on a website, so I prefer to work with them directly rather than using Markdown. Whatever CMS you use, just make sure it supports changing theme/template and allows custom content to be inserted at different sections on a web page or preferably multiple pages (i.e global content widget). I found these 2 features crucial and make my work a lot easier.
- eoncarlyle 2y agoMy blog is a set of markdown files parsed to HTML by an ASP.NET application. You can self host GitHb actions runners, so making a new post is as simple as committing a markdown file. I wrote the static site stuff myself which was probably a waste of time, but a static site created by Hugo/Jekyll/etc. hosted on your own VPS or server and deployed with GitHub actions (or another version control equivalent) is definitely the way to go. https://github.com/eoncarlyle/portfolio-website https://github.com/eoncarlyle/portfolio-website https://iainschmitt.com/post/november-2024-grab-bag#moving-this-website-to-f# https://iainschmitt.com/post/november-2024-grab-bag#moving-t... https://iainschmitt.com/post/new-syntax-highlighting https://iainschmitt.com/post/new-syntax-highlighting
- vednig 2y agoIf I were ever to build a blog from scratch, I'd follow the guidelines based on what features I prefer over others. I built shedtheshade.com few years ago, and learnt a few things about blogs along the way. Here are my takeaways: - Substack is great for starters - Mailing should be always included with blog config for best results - If a blog is updated, best way is to make sure changes are reflected in real-time as it can do a lot of damage. - People(and crawlers) don't tend to wait for a lot of time, make sure it is fast for at least first paragraph loading in few seconds - Understanding about Readability in modern society is important - Media hosts should be served via CDN - Comments should be independent to blog post db because it's the only user entered content with possiblity of getting your blog hacked Hence the best way would be: - Some SSG (preferably SEO optimised) - Backend API on CF Workers - Websockets for Blog Update - Some DB (Preferably NoSQL for Posts and SQL for User Acc. info) - Additional Layer of CDN - API for Top or Suggestive Posts - Editor.js for Editing