A community management portal built for Dusty Trails Tres Dias, a Christian renewal weekend ministry based in central Texas.
Dusty Trails Tres Dias (DTTD) is a local chapter of the Tres Dias movement — a worldwide network of Christian communities whose mission is to train servant leaders. The community invited me to build this portal to reduce the administrative friction of hosting their twice-yearly renewal weekends.
The original request was simple: online payments and digital forms instead of paper. The platform has since grown to cover the full candidate journey (sponsorship → application → payment → weekend) and team/volunteer coordination.
Design philosophy: DTTD has a strong emphasis on person-to-person relationship. The goal is to handle the logistics that don't need to be in person, not to automate away human connection.
Who uses it:
| Role | What they do here |
|---|---|
| Candidates | Submit their application, fill out forms, pay their weekend fee |
| Sponsors | Submit a sponsorship nomination on behalf of a candidate |
| Team members (volunteers) | Complete required team forms, pay the team fee, view the roster |
| Admins / Pre-Weekend Couple | Manage candidate approvals, rosters, and weekend configuration |
For a deeper explanation of how Tres Dias weekends work and why the system is structured the way it is, see docs/domain.md.
# Install go-task (required for automated setup)
brew install go-task
# Run the setup script (installs dependencies, configures environment)
task setup
# Run development server
yarn dev
# Optionally, if you are testing any online payments:
task dev:webhooks # will startup a webhook listener locally to receive Stripe webhook eventsFor detailed setup instructions, see SETUP.md.
If you prefer manual setup or need more control:
# Install dependencies
yarn
# Start local database
yarn db:start # Spins up a local postgres database using supabase CLI
yarn db:migrate <description> # creates a template migration file
yarn db:reset # run whenever you update seed file, or add a migration
yarn db:generate # run after applying migrations to a running database, to update database.types file
# Run development server
yarn dev
# Stops the supabase docker containers running for the backend
yarn db:stopCopy .env.example into .env.local, and follow the instructions inside
This project uses Conventional Commits enforced via commitlint on pre-commit. All commits must follow this format:
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
| Type | Description | Release Impact |
|---|---|---|
feat |
New feature | Minor (0.X.0) |
fix |
Bug fix | Patch (0.0.X) |
perf |
Performance improvement | Patch (0.0.X) |
revert |
Revert a previous commit | Patch (0.0.X) |
docs |
Documentation only | No release |
style |
Code style (formatting, semicolons, etc.) | No release |
refactor |
Code refactoring (no feature/fix) | No release |
test |
Adding or updating tests | No release |
build |
Build system or dependencies | No release |
ci |
CI configuration | No release |
chore |
Maintenance tasks | No release |
- Next.js 15 + TypeScript
- Supabase (Auth + Database)
- Stripe (Payments)
- ShadCN + Tailwind CSS
- Test payout webhook, make sure that online payments are marked as deposited when we receive a payout
- Next, need to show some indicator on the payments page that a payment was deposited
- Create delete user action
- Add user account actions dropdown menu
- Help rectors choose people: create master roster page that can be arbitrarily filtered, or maybe where users can build their own queries? With templates / examples