Welcome to Fast Scriptures! This guide will help you get up and running as a contributor, whether you're fixing a bug, adding a feature, or just exploring the codebase.
Fast Scriptures is a modern, mobile-first scripture reading application that lets users:
- Search through all LDS scriptures with full-text search
- Browse scriptures by volume, book, and chapter
- Get random verses for daily inspiration
- Read with a beautiful, dark Cursor-inspired interface
The app is built with FastAPI (backend) + React (frontend) and designed to be fast, accessible, and developer-friendly.
Before you start, make sure you have these tools installed:
- Python 3.9+ - For the FastAPI backend
- uv - Fast Python package manager (install guide)
- Node.js 18+ - For the React frontend
- Git - For version control
- Visual Studio Code or Cursor - The project is optimized for these editors
- GitHub CLI (
gh) - Makes creating PRs easier - httpie or curl - For testing API endpoints
# Verify your tools are installed
python --version # Should be 3.9+
uv --version # Should be latest
node --version # Should be 18+
npm --version # Comes with Node.js
git --version # Any recent versiongit clone https://github.com/willwillis/fast-api-scripture-app.git
cd fast-api-scripture-appgit submodule update --init --recursiveThis downloads the LDS scripture database (~10MB)
cd backend
# Install Python dependencies (uv is much faster than pip)
uv sync
# Set up the database (copies from submodule)
python setup_database.py
# Start the backend server
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000β Backend ready! Visit http://localhost:8000/docs to see the API documentation
cd frontend
# Install Node.js dependencies
npm install
# Start the frontend development server
npm run devβ Frontend ready! Visit http://localhost:5173 to see the application
You should now have:
- β Backend API running at http://localhost:8000
- β Frontend app running at http://localhost:5173
- β API docs at http://localhost:8000/docs
- β Scripture database loaded and working
Try searching for "love" or clicking "Random Scripture" to test everything works!
Here's what you're working with:
fast-scriptures/
βββ backend/ # FastAPI backend
β βββ app/
β β βββ main.py # πͺ Entry point - starts here
β β βββ routes/ # π€οΈ API endpoints (/api/scriptures/*)
β β βββ services/ # π§ Business logic (database queries)
β β βββ models/ # π Data structures (what API returns)
β β βββ utils/ # βοΈ Configuration & helpers
β βββ tests/ # π§ͺ Backend tests
β βββ pyproject.toml # π¦ Python dependencies
βββ frontend/ # React frontend
β βββ src/
β β βββ App.tsx # π Main app component
β β βββ components/ # π§© UI components
β β βββ hooks/ # πͺ React hooks (useScriptures)
β β βββ services/ # π‘ API calls to backend
β β βββ types/ # π TypeScript types
β βββ package.json # π¦ Node.js dependencies
β βββ tailwind.config.js # π¨ Styling configuration
βββ submodules/
β βββ lds-scriptures/ # π Scripture database (SQLite)
βββ docs/ # π Documentation (you are here!)
| File | What It Does | When You'd Edit It |
|---|---|---|
backend/app/routes/scriptures.py |
API endpoints for scripture operations | Adding new API features |
backend/app/services/database.py |
Database queries and business logic | Changing how data is fetched |
frontend/src/components/ScriptureReader.tsx |
Main UI component | Improving the user interface |
frontend/src/hooks/useScriptures.ts |
React hook for API calls | Adding new frontend features |
frontend/src/services/api.ts |
API client functions | Adding new API endpoints |
Let's make a small change to get familiar with the workflow:
git checkout -b improve-docsEdit README.md and add your name to a contributors section, or fix a typo you notice.
# Test backend
cd backend
uv run pytest tests/ -v
# Test frontend
cd frontend
npm run test
npm run lint
# Test both work together (manual)
# Visit http://localhost:5173 and try the appgit add .
git commit -m "docs: add contributor section to README
- Added contributors section to acknowledge project contributors
- Fixed minor typo in setup instructions"git push -u origin improve-docs
# If you have GitHub CLI:
gh pr create --title "Improve documentation" --body "Small improvements to README"
# Otherwise, go to GitHub and create a PR manuallyTesting is important! Here's how to run all the tests:
cd backend
uv run pytest tests/ -v --cov=app --cov-report=term-missingcd frontend
npm run test # Run tests once
npm run test:coverage # Run with coverage report
npm run test -- --watch # Run in watch mode# Backend
cd backend
uv run black --check app tests # Check formatting
uv run isort --check-only app tests # Check import order
uv run flake8 app tests # Check code style
# Frontend
cd frontend
npm run lint # Check TypeScript/JavaScript
npm run type-check # Check TypeScript types# Use our Makefiles for convenience
make test-backend
make test-frontend
make lint-all"Module not found" errors
cd backend
uv sync # Reinstall dependencies"Database not found" errors
git submodule update --init --recursive
python setup_database.pyPort 8000 already in use
# Kill any existing process
lsof -ti:8000 | xargs kill -9
# Or use a different port
uv run uvicorn app.main:app --reload --port 8001"Module not found" or TypeScript errors
cd frontend
rm -rf node_modules package-lock.json
npm installPort 5173 already in use
# Vite will automatically use next available port
# Or specify a different port
npm run dev -- --port 3000Tailwind styles not working
# Restart the dev server
npm run devGit submodule problems
git submodule deinit --all
git submodule update --init --recursivePre-commit hooks failing
# Install pre-commit (if you want to use it)
pip install pre-commit
pre-commit install
# Or skip pre-commit for now
git commit --no-verify -m "your message"Stuck? Here are the best places to get help:
- Check our docs: Browse the documentation index
- Search issues: Look through GitHub issues
- Ask a question: Create a new issue with the "question" label
- Review existing code: Look at similar features in the codebase
Now that you're set up, here's what to explore next:
- π Read API Standards - Learn our API design principles
- π Browse
backend/app/routes/scriptures.py- See how endpoints are built - π§ͺ Check
backend/tests/test_api.py- See how we test APIs
- π¨ Examine
frontend/src/components/- See our React components - πͺ Study
frontend/src/hooks/useScriptures.ts- Learn our data fetching - π± Review the Tailwind config - Understand our theming
- π Read Deployment Guide - Learn how we deploy
- π Check Monitoring Setup - See our observability
- π Review Development Workflow - Our development process
- ποΈ Read Architecture Overview (Coming Soon)
- π Browse Release Notes - See how the project evolved
- π Check API Standards - Understand design decisions
Looking for something to work on? Here are beginner-friendly areas:
- Fix typos in documentation
- Improve error messages
- Add missing TypeScript types
- Fix responsive design issues
- Add new search filters
- Improve keyboard navigation
- Add loading states
- Enhance accessibility
- Add code comments
- Create tutorials
- Improve setup instructions
- Add architecture diagrams
- Add test cases
- Improve test coverage
- Add integration tests
- Create visual regression tests
Welcome to the Fast Scriptures community! π
We're excited to have you contribute. Start small, ask questions, and don't hesitate to open a PR even for minor improvements. Every contribution helps make the project better!
Quick Links: Documentation Index | Development Workflow | API Standards | Main README