← Home

Creatrweb

IndieWeb Express Mistral AI

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

Technology choices used in the Creatrweb 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:

Required environment variables for local development.
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:

Hostinger deployment settings for the application.
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.