Behind the Scenes
How We Build Your Installation
A look at the actual process—from initial setup to the first working iteration.
The foundation
Every installation starts from a foundation. We maintain a base repository that encapsulates years of best practices—not a template you'd recognize, but a starting point we customize completely for your project.
Here's what that looks like when we start a new project:
# Create your project from our foundation
git clone https://github.com/supported-systems/foundation.git your-project
cd your-project
# Remove the origin and make it yours
git remote remove origin The code is now completely independent—your project, your repository, your history. This is what "you own everything" actually means.
Why this matters
Unlike SaaS platforms where your data lives on someone else's infrastructure, or themes where you're forever dependent on upstream updates—this is truly yours. Disconnect from the internet, and you still have everything needed to run, modify, and deploy your installation.
Environment configuration
We use environment variables to configure each installation. This keeps secrets secure, allows different configurations for development and production, and makes deployments predictable.
Here's a simplified view of a typical configuration:
# Environment Configuration
NODE_ENV=development
DOMAIN=your-domain.com
SITE_NAME="Your Installation Name"
# Development Settings
HOT_RELOAD=true
DEBUG_MODE=false
# Production-specific (different values in prod)
CACHE_ENABLED=true
CDN_URL=https://cdn.your-domain.com This separation means we can iterate rapidly in development (with hot reload, verbose logging, and debug tools) while production runs optimized for speed and security.
What environment does YOUR project need to thrive? A fast development cycle? Strict security requirements? Offline capability?
See also in Process
Environment Variables ReferenceComplete documentation of all configuration options
Containerized development
We run everything in Docker containers. This guarantees that the installation works identically on any machine—your laptop, our development server, production.
# Start the development environment
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
# What you'll see:
✓ Container web-1 Started
✓ Container api-1 Started
✓ Container db-1 Started
✓ Ready in 1.2s
Local: https://localhost:4321/ This isn't just convenient—it's essential for self-hosted deployments. The same container that runs on your laptop runs on your production server. No "works on my machine" surprises.
Development Mode
- • Hot reload enabled
- • Source maps for debugging
- • Verbose error messages
- • Mounted source code
Production Mode
- • Optimized build
- • Static file serving
- • Automatic HTTPS
- • Health monitoring
The iteration loop
Here's the rhythm of development. It's fast, visual, and conversational:
- 1
We make a change
Edit a component, adjust styling, add functionality
- 2
Hot reload shows it instantly
The browser updates automatically—no refresh needed
- 3
You review and give feedback
Via screen share, recorded walkthrough, or review session
- 4
We iterate until it's right
As many rounds as needed—artisan work takes craft
This isn't a waterfall process where you wait weeks to see progress. It's collaborative—you're involved throughout, seeing changes as they happen.
Imagine watching YOUR vision come to life like this—iteration by iteration, with your input shaping every detail.
Structure and organization
Every installation follows a consistent structure. This makes the code navigable, maintainable, and extensible:
your-project/
├── src/
│ ├── components/ # Reusable UI components
│ ├── layouts/ # Page templates
│ ├── pages/ # Each file = a route
│ │ ├── index.astro # → yoursite.com/
│ │ ├── about.astro # → yoursite.com/about
│ │ └── blog/ # → yoursite.com/blog/*
│ └── styles/ # Global styles
├── public/ # Static assets
├── docker-compose.yml # Container orchestration
└── .env # Configuration The pattern is intentional: pages map directly to URLs, components are isolated and reusable, and configuration lives in environment variables. When you inherit this codebase, you can find anything.
From development to production
When your installation is ready, deployment is straightforward. The same containerized approach that made development consistent makes production reliable:
# Production deployment
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# Caddy handles HTTPS automatically
# Zero-downtime deploys via container orchestration
# Same containers, different configuration Your installation runs on infrastructure you control. We set it up, ensure it's secure, and hand you the keys. After that, it's yours—we're available for maintenance and updates if you want them, but you're never locked in.
Self-hosted means self-owned
Your installation runs on a VPS, cloud instance, or even a machine in your office. You control the data, the uptime, the security. If we disappeared tomorrow, your installation would keep running.
This is the first week
What you've seen here—the foundation setup, environment configuration, containerized development, iteration loop—this is typically the first week of a project.
By day seven, you usually have:
- A working installation running locally and in staging
- Core structure reflecting your specific needs
- Initial design direction and color palette
- A rhythm of iteration that continues throughout the project
The rest builds from there—storytelling, advanced features, polish—each layer adding to the foundation until your installation is exactly what you envisioned.
Ready to start that conversation? Tell me about your project and we'll figure out if we're a good fit.
Ready to explore your project?
Every installation starts with a conversation. What are you building? What matters most? What story do you want to tell?
Want to see more? The next page explores digital storytelling—how we craft compelling narratives that make installations memorable.