The JeosCraft Portal
The system running the shop you’re looking at — every client, from first brief to 90-day check-in, moves through software built for the job.
- Role
- Founder & sole developer
- Timeline
- Apr 2026 – present
- Status
- Running the business today
- Type
- Internal SaaS · this site
Inquiry received through 90-day check-in — each a typed email template in one registry.
The Project Brief captures scope in ~10 minutes and autosaves every keystroke locally.
Complete themed builds — trades, restaurant, salon, dental, and more — ready as starting material.
Projects, scope, content, revisions, proposals, contracts, invoices, and an activity log.
A one-person shop makes promises a whole team usually keeps.
The homepage promises written proposals, fixed prices, milestone visibility, replies inside 48 hours, and check-ins after launch. For an agency, a project manager and a CRM keep those promises. For one developer, the honest options are a heroic inbox — or a system.
Most freelancers pick the inbox, and the process quietly becomes whatever this week’s memory allows: proposals as ad-hoc emails, scope in a thread somewhere, the 60-day check-in that never happens.
So before taking clients, I built the system — the same way I’d build it for a paying customer.
One chain, brief to check-in.
The public half is the Project Brief at /inquiry; everything after it runs in the admin portal.
The brief
A prospective client fills out the eight-section Project Brief — business basics, goals, content, tier. It autosaves to their browser on every change and greets them with their draft if they come back later. Submitting writes the structured scope to Postgres.
The spec
The submitted brief compiles into a Markdown build specification — headers, bullets, empty fields skipped — shaped so an AI builder can act on it directly. The form's real output isn't a lead notification; it's the spec the build starts from.
The dashboard
Every inquiry becomes a project in the admin dashboard: notes, stage, and an activity log, behind magic-link auth. One place answers "where is this project and what happens next."
The emails
Each stage of the engagement — discovery scheduled, proposal sent, build started, ready for review, launched, invoice paid, 30/60/90-day check-ins — has a typed template sent from the project page via Resend, in one consistent first-person voice.
The paper trail
Proposals, contracts with their own storage bucket, invoices with Stripe fields, and an activity log recording what was sent when. The promises on the homepage — written proposals, fixed prices — have tables behind them.
Small system, real engineering.
The interesting decisions here aren’t scale — they’re fit: every piece sized to what a one-person shop actually needs, with the upgrade path written down where it isn’t.
The brief compiles to a build spec
The form’s real output is a Markdown specification — generated from the structured scope, empty fields skipped — written so an AI builder can act on it directly. Capturing the right information and shaping it into buildable form is the product; the email notification is a side effect.
Ten minutes of typing is never lost
The brief autosaves to the browser on every change and restores the draft with a welcome-back banner — hydration-safe, so a returning visitor’s draft never flashes or clobbers. Nobody abandons an inquiry because a tab closed.
One registry, fifteen emails
Every lifecycle stage maps to a typed builder in a single registry: adding a stage is one key and one function, and the send endpoint picks it up automatically. All fifteen render through one branded shell in the same first-person voice — no template drifting off-tone three months in.
Auth sized to the truth
One admin exists, so the system says so: magic-link sign-in via Supabase Auth against a single hardcoded admin email, enforced in middleware, with separate service-role and cookie-aware server clients. The upgrade path to a proper roles table is documented at the constant — engineering restraint as a feature, not a shortcut.
Templates as starting material
Ten complete industry builds — trades, restaurant, salon, dental, real estate, and more — live in the codebase as themed foundations, so a Starter-tier project begins from a real design, not a blank page. The brief’s tier and industry answers point straight at one.
Stack
- Next.js 16
- TypeScript
- Supabase
- PostgreSQL
- Resend
- Stripe
- Tailwind v4
- Vercel
You’re inside it right now.
This case study is a page in the product it describes. The Project Brief, the admin dashboard, and the lifecycle email registry run the JeosCraft client flow today; the client-facing portal views — where a client reviews milestones and pays invoices — are in active development.
It’s the smallest project on this page and the one a client feels most: every promise in the process section has a table, a template, or an endpoint behind it.



