Built with NoFPress
We practice what we preach.
This very website is statically generated, version-controlled and deployed to a global CDN. No WordPress. No plugin maintenance. Just a streamlined publishing workflow.
The actual stack
Everything listed here is in use on this site today. Nothing aspirational.
Next.js App Router
next@16.3.8App Router, used purely as a static site generator
Static export
next@16.3.8Every page is written to disk as HTML at build time
TypeScript
typescript@6.0.3Strict mode across pages, content tooling and scripts
Tailwind CSS
tailwindcss@4.3.3Utility-first styling compiled to a single small stylesheet
Markdown
remark-parse@11.0.0Articles and long-form pages live as Markdown files
gray-matter
gray-matter@4.0.3Parses and validates YAML frontmatter
remark / rehype
remark-rehype@11.1.2Markdown to sanitized HTML, with heading anchors and code highlighting
Git-based publishing
Every content change is a commit, reviewed and reversible
Cloudflare CDN
Static files served from Cloudflare Pages' global network
Build-time translations
@anthropic-ai/sdk@0.131.0LLM-drafted translations, reviewed by humans, generated before build
Architecture
Everything happens before a visitor arrives. At request time there is only a CDN serving files.
- 01
Markdown + Git
Articles, pages and UI copy in five languages
- 02
Content validation
Frontmatter schema, links, translation parity
- 03
Next.js static build
Pre-renders every page for each domain
- 04
Static HTML / CSS / JS
Plain files — no server, no database
- 05
Cloudflare CDN
Cached at the edge, close to visitors
- 06
Visitor
Gets a ready-made page
Performance results
We only publish measurements we have actually taken, with the tool, date and conditions alongside them.
$ lighthouse --verified
Measurements coming soon.
Results will appear here after we measure the production site and review the reports.
Publishing workflow
- 01
Write Markdown
An article starts as a Markdown file in English.
- 02
Generate translation drafts
A script asks an LLM for draft translations, keeping code, links and names intact.
- 03
Review translations
A human checks every draft. Nothing machine-translated is published automatically.
- 04
Commit to Git
Approved files are committed; the history shows who changed what.
- 05
Build
CI validates content and builds two static sites: nofpress.com and nofpress.pl.
- 06
Deploy
The output is uploaded to Cloudflare Pages and served from its CDN.
Tradeoffs we accept
Publishing needs a build
A typo fix isn't live the moment you save. It goes live when the next build finishes deploying — usually minutes.
Forms need a separate service
Our audit form posts to a small Cloudflare Worker. It's a second moving part we have to maintain and secure.
Editing is Git-based
That's comfortable for developers. Non-technical editors would want a Git-based CMS interface on top.
The framework still ships JavaScript
Next.js sends a client runtime for navigation and hydration. Pages work without it, but it isn't zero-JS.
Translations still need people
LLM drafts speed things up, but every language needs a reviewer who knows the market.
Want your website to work like this?
Tell us about your WordPress site and we'll check whether a static migration makes sense.
Get a Free Migration Audit