Jayce's Lab
An engineer who studies AI, backend and databases — and runs them on home servers
// Goal: become a real engineer FUNCTION becomeRealEngineer(me) WHILE me.skill < realEngineer.bar problem ← findARealProblem() // in the field, not the textbook design ← splitAndDesign(problem) result ← buildAndOperate(design) // for real, on home servers IF result.failed THEN recordCauseAndFixAgain(result) me.skill ← me.skill + lessonsFrom(result) writeAndShare(result) RETURN "real engineer" Less repetition, more time to build.
Less repetition, more time to build.
- AI that answers
- Running servers
- Working with data
- Study & notes
What I work on
Home-lab AI infrastructure
Two machines — a server and an AI brain — running local models, backups and monitoring.
AI chat
A self-hosted chat with cited web search, images, long-form writing and quality grading.
This site
Static generation, three languages, search and Ask AI — from design docs to code.
Data & databases
Studying SQL and data analysis, and designing data for real services.
How a real engineer is made
- Find real problems in the field, not in the textbook.
problem ← findARealProblem(field) - Split the problem into small pieces and design first.
design ← splitAndDesign(problem) - Build it and run it for real on home servers; when it fails, record why and fix it again.
REPEAT buildAndOperate(design) UNTIL itReallyWorks - Write down what you learned and share it — those posts become sources for Ask AI.
FOR EACH lesson IN results: write(lesson)
Latest posts
See all →- Why I wrote 40 design documents before building this site
Comparing the existing blog and chat with the design documents, item by item, and merging them into one design.
- Principles for running an AI chat on a home server
Grounded answers, internal-network protection, data minimisation and automatic quality grading.
- A site whose colours change every 7 hours
Changing the colours of both the blog and the chat at the same moment with nothing but a clock.