Creatrweb
A personal site and a working demonstration of the Creatrweb framework — built to own the content, keep URLs permanent, and stay portable. The design, architecture, and every decision made along the way are documented here.
Features
- iMac monitor frame — the entire site renders inside a styled iMac shell on desktop; a floating nav pill takes over on mobile
- AI chat terminal — a retro terminal overlay powered by Mistral AI with local RAG over documents you index yourself
- IndieWeb microformats — h-card and rel=me links are server-rendered in static HTML; no client-side hydration required
-
Six pages —
/(home),/projects,/readme,/indieweb-platform,/creatrweb-rag,/terminal-ui
Stack
| Layer | Choice |
|---|---|
| Runtime | Node.js 20, Express 4 |
| Language | TypeScript — bundled via esbuild to server.bundle.js |
| Frontend | Vanilla JS + static HTML in public/ |
| Database | SQLite via Drizzle ORM |
| AI | Mistral AI (mistral-embed + agent inference) |
| RAG store | embeddings.json — built locally, committed to the repo |
Local Development
cp .env.example .env # fill in the three required vars below npm install npm run dev # http://localhost:3000
Required environment variables:
| Variable | Purpose |
|---|---|
SQLITE_DATABASE_URL |
Path to the SQLite file, e.g. ./data/creatrweb.sqlite |
MISTRAL_API_KEY |
Mistral API key |
AGENT_ID |
Mistral agent ID for chat inference |
PORT is optional and defaults to 3001 in local dev.
RAG Indexing
Place .md, .txt, .html, or
.pdf files in documents/ and run:
npm run rag:index
Output is written to embeddings.json in the repo root. PDF
extraction runs locally through Poppler's pdftotext — no document
text is sent to a remote parser. Poppler must be installed on the machine
running the indexer (brew install poppler on macOS).
Indexing is manual-only. Nothing indexes on server start or during a visitor request.
Deployment (Hostinger)
This repo deploys as a bundled Express app on Hostinger Node.js v20.
hPanel settings:
| Setting | Value |
|---|---|
| Framework preset | Other |
| Root directory | ./ |
| Node.js version | 20.x |
| Output directory | leave blank |
| Build command | npm install && npm run build |
| Entry file | server.bundle.js |
Runtime environment variables (set in hPanel):
NODE_ENV=production HOST=0.0.0.0 PORT=5000 SQLITE_DATABASE_URL=/home/<username>/path/to/creatrweb.sqlite MISTRAL_API_KEY=... AGENT_ID=...
SQLITE_DATABASE_URL must be an absolute path on Hostinger —
relative paths are not resolved correctly under Phusion Passenger.
esbuild and dotenv are listed under
dependencies (not devDependencies) because Hostinger
installs only production dependencies before running the build step. Both are
required at build time.
Personal Note
My name is Chris Fornesa, and as someone with a lifelong passion for art and creative pursuits, but also knowledge of data science and a long-term interest in web development, I have felt myself personally torn between two wants: preserving human creativity and authenticity and ensuring that humans don't simply fall behind technological progress due to our biases about what is or isn't "real". Authenticity can be a loaded, if not politicized, notion that is oftentimes obfuscated to fit specific, traditionalist ideas of what is or isn't (insert topic here). AI and algorithmic harms are very real and are already occurring, but so are algorithmic utility, specifically the creative use cases that artists, programmers, and other creative people have already achieved using large language models.
Therefore, this framework is all about leveraging what AI does best, while embedding safeguards to prevent cognitive atrophy and encourage critical thought in the process. Though agentic AI has made the process of creating websites, applications, and software more accessible than ever, the real opportunity is the ability to apply more thought, not less of it, into your creative programming practice. Whether you're a beginner, intermediate, or advanced developer, engineer, or AI consumer, this framework will hopefully encourage you to exercise your creative prowess as you utilize AI coding tools.