Quick-start templates for new projects. Currently supports: fullstack-py-react, mobile-py-reactnative, python-base, cpp-base.
./create-fullstack.sh <new-project-name> [destination-dir]
./create-mobile.sh <new-project-name> [destination-dir]
./create-python-base.sh <new-project-name> [destination-dir]
./create-cpp-base.sh <new-project-name> [destination-dir]Examples:
./create-fullstack.sh my-cool-app ~/Code/projects
./create-mobile.sh my-mobile-app ~/Code/projects
./create-python-base.sh my-tool ~/Code/projects
./create-cpp-base.sh my-cpp-tool ~/Code/projectsDefaults to the current directory if destination-dir is omitted.
- Copies
fullstack-py-react/to<destination-dir>/<new-project-name>(excludesnode_modules,.venv,__pycache__, lockfiles,.git) - Replaces every
PROJECT_NAME_PLACEHOLDERplaceholder in the copied files with your project name - Installs backend deps:
uv sync(inbackend/) - Installs frontend deps:
npm install(infrontend/) - Runs
git initin the new project
- Copies
mobile-py-reactnative/to<destination-dir>/<new-project-name>(excludesnode_modules,.venv,__pycache__, lockfiles,.git,.expo,.expo-shared,ios/Pods,ios/build,android/.gradle,android/build) - Replaces every
PROJECT_NAME_PLACEHOLDERplaceholder in the copied files with your project name - Installs backend deps:
uv sync(inbackend/) - Installs frontend deps:
npm install(infrontend/) - Installs iOS pods if
frontend/ios/Podfileexists (bare RN only — skipped for Expo-managed projects, since native folders aren't generated untilexpo prebuild) - Runs
git initin the new project
- Copies
python-base/to<destination-dir>/<new-project-name>(excludes.venv,__pycache__, lockfile,.git) - Replaces every
PROJECT_NAME_PLACEHOLDERplaceholder in the copied files with your project name - Installs deps:
uv sync(at project root) - Runs
git initin the new project
- Copies
cpp-base/to<destination-dir>/<new-project-name>(excludesbuild,bin,.git) - Replaces every
PROJECT_NAME_PLACEHOLDERplaceholder in the copied files with your project name - Makes
scripts/*.shexecutable - Configures the project:
cmake -S . -B build - Runs
git initin the new project
From the project root (the folder containing backend/ and frontend/):
./start.sh # opens a tmux session, backend (left pane) + frontend (right pane)
./stop.sh # kills that session, stops bothstart.sh installs backend (uv sync) and frontend (npm install) dependencies before starting, then runs uv run uvicorn app.main:app --reload in backend/, so backend/app/main.py needs a FastAPI instance named app. Re-attach anytime with tmux attach -t <project-name>-dev.
From the project root (the folder containing backend/ and frontend/):
./start.sh [android|ios|web] # opens a tmux session, backend (left pane) + Expo (right pane)
./stop.sh # kills that session, stops bothstart.sh installs backend (uv sync) and frontend (npm install) dependencies before starting, then runs uv run uvicorn app.main:app --reload in backend/ and npx expo start in frontend/. Pass android, ios, or web to target a specific platform (defaults to the Expo dev menu if omitted). Re-attach anytime with tmux attach -t <project-name>-dev.
python-base has no server, so there's no start.sh/stop.sh — run it directly:
uv run python -m app.mainFrom the project root:
./scripts/run.sh # quiet incremental build + run
./scripts/run.sh --clean # wipes build/, full reconfigure + build, then runOr set up the cpprun alias in your shell config to run it from anywhere inside the project:
alias cpprun='./scripts/run.sh'uvinstalled and on$PATHnpminstalled (forfullstack-py-reactandmobile-py-reactnative)rsynctmux(forstart.sh/stop.shinfullstack-py-reactandmobile-py-reactnative)cmakeand a C++ compiler supporting C++23 (forcpp-base)- Expo CLI tooling / a simulator or device setup (for running
mobile-py-reactnativeon iOS/Android — see Expo docs)
Any file that should carry the project's name needs the literal token: