TEMPLATE_APP_DESCRIPTION
When you create a repo from this template, customize it in one go with a config file:
-
Copy the example config and edit it with your app details:
cp template.config.example.yaml template.config.yaml # Edit template.config.yaml: app name, description, SEO, logo, repo, deployment (systemd names, env paths) -
Apply the config across the repo (package.json, frontend, docs, systemd, CI/CD):
pnpm install # for the apply-template script pnpm run apply-template -
Optional: Add your logo under
apps/frontend/static/andapps/docs/static/img/(paths set in config:branding.logoPath,seo.favicon,seo.ogImage).
The config drives:
- App identity: name, short name, description, slug
- SEO: title, description, keywords, favicon, OG image
- Branding: logo path and alt text
- Repo: GitHub org/repo for links and edit URLs
- Deployment:
appNamefor/opt/<name>/{frontend,backend}/{staging,production}, systemd service names (staging/production), dedicated port mappings
See template.config.example.yaml for every option. After applying, commit the changes and set up GitHub Environments and secrets as in infra/systemd/README.md.
Before deploying a new app, use the port finder script to scan running services and get port recommendations:
# Scan all services and get recommendations
pnpm run find-available-port
# Or run directly
./scripts/find-available-port.sh
# Filter by app name
./scripts/find-available-port.sh myapp
# Filter by environment
./scripts/find-available-port.sh myapp staging
# Filter by component
./scripts/find-available-port.sh myapp production backendThe script scans /etc/systemd/system and /lib/systemd/system for services matching the {appname}-{env}-{frontend|backend}.service pattern, extracts configured ports, checks which are actively listening, and recommends available ports in the appropriate ranges.
- Backend: Rust-based API server with base endpoints
- Frontend: SvelteKit application with SSR
- Documentation: Docusaurus documentation site
- Shared Modules: Reusable services and utilities
- Monorepo: Managed with pnpm workspaces
- CI/CD: GitHub Actions workflows ready (staging/production environments)
- Development: Makefile commands for quick development
.
βββ apps/
β βββ backend/ # Rust backend API
β βββ frontend/ # SvelteKit frontend
β βββ docs/ # Docusaurus documentation
βββ shared/ # Shared services and utilities
βββ infra/ # Infrastructure configuration
βββ .github/workflows/ # CI/CD workflows
- Package Manager: pnpm
- Backend: Rust (Axum)
- Frontend: SvelteKit with Tailwind CSS v4
- Documentation: Docusaurus
- Containerization: Docker & Docker Compose
- Node.js >= 20.0.0
- pnpm >= 10.0.0
- Rust (for backend development)
- Docker & Docker Compose (for infrastructure)
# Install dependencies
pnpm install
# Start all services in development mode
make up
# Or start individual services
make frontend-dev
make backend-dev
make docs-dev# Frontend development
pnpm frontend dev
# Backend development
pnpm backend dev
# Documentation development
pnpm docs devmake up- Start all servicesmake down- Stop all servicesmake frontend-dev- Start frontend in dev modemake backend-dev- Start backend in dev modemake docs-dev- Start docs in dev modemake build- Build all servicesmake test- Run all tests
pnpm frontend dev- Run frontend development serverpnpm backend dev- Run backend development serverpnpm docs dev- Run documentation development serverpnpm frontend build- Build frontend for productionpnpm backend build- Build backend for production
Rust-based API server with base endpoints:
- Health check endpoint
- API versioning
- CORS configuration
- Error handling
SvelteKit application with:
- Server-side rendering (SSR)
- Tailwind CSS v4 for styling
- Responsive design
- SEO optimization
Docusaurus documentation site with:
- Getting started guides
- API documentation
- Architecture overview
- Deployment guides
Reusable services and utilities:
- Sample shared service module
- Common utilities
- Shared types and interfaces
Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.