We're a volunteer group of amateur developers building the digital platform behind F3 Nation — a national network of free, peer-led outdoor workout groups for men. Our tools help regions organize workouts, track attendance, and grow their communities.
Everyone is welcome. Whether you're a seasoned engineer or writing your first pull request, there's a place for you here.
Modernizing the "How" to support he "Why".
- Providing off-the-shelf solutions enabling efficient launches to new regions.
- Helping sad clowns find F3 through digital mediums.
- Inspiring invigoration through real-time feedback and reporting on region health.
Accomplishing this through:
- Unified Data: Every tool "talks" to the others, ensuring shared data and user management across the Nation.
- Unified Support: Strong collaboration and official infrastructure promotes stability and longevity.
flowchart LR
subgraph users["👤 Users"]
slackUser["Slack Member"]
webUser["Web Visitor"]
leader["Region Admins"]
end
subgraph channels["💬 Channels"]
slack["Slack"]
web["Web"]
end
subgraph apps["🖥️ Applications"]
bot["Slack Bot"]
map["Map and Admin"]
nearme["F3 Near Me"]
vault["PAX Vault"]
codex["The Codex"]
orgmap["Org Map"]
regions["Region Pages"]
status["Status Page"]
end
subgraph platform["☁️ Platform Services"]
api["F3 Nation API"]
auth["SSO Auth"]
end
subgraph data["🗄️ Data Stores"]
db[("PostgreSQL")]
bq[("BigQuery")]
end
slackUser --> slack
leader --> slack
webUser --> web
slack --> bot
web --> map
web --> nearme
web --> vault
web --> codex
web --> orgmap
web --> regions
web --> status
leader --> map
bot --> db
map --> api
nearme --> api
orgmap --> api
regions --> db
codex --> db
vault --> bq
api --> db
auth -.-> vault
auth -.-> codex
| Repo | What It Does | Tech |
|---|---|---|
| f3-nation | Monorepo — API, interactive map, and admin tooling | TypeScript · Next.js · Drizzle ORM · Turbo |
| f3-nation-slack-bot | The primary way most people interact with F3 tech — scheduling, attendance, region management. Installed on 300+ Slack workspaces | Python · Slack Bolt · SQLAlchemy |
| pax-vault | Read-only analytics dashboard — participation, leadership, and engagement insights | TypeScript · Next.js · BigQuery · Firebase Auth |
| f3nearme | Lightweight "find a workout near you" map (f3near.me) | TypeScript |
| f3-nation-auth | Shared SSO authentication package used by PAX Vault and The Codex | TypeScript |
| the-codex | The F3 Exicon (exercises) and Lexicon (terminology) — a community knowledge base | TypeScript · Next.js · NextAuth |
| f3-region-pages | Out-of-the-box website landing pages for regions that don't want to self-host | TypeScript · Next.js · Drizzle ORM |
| f3-status | Simple health/status page for all F3 apps (status.f3nation.com) | TypeScript · Vite · GitHub Pages |
| f3-org-map | Geographic digital directory — visualizes F3's org structure on a map | TypeScript · Vite · Leaflet |
This table makes it easy for contributors to find production and staging environments in one place.
| Repo | Production | Staging | Hosting |
|---|---|---|---|
| f3-nation | api.f3nation.com map.f3nation.com map.f3nation.com/admin |
staging.api.f3nation.com staging.map.f3nation.com staging.map.f3nation.com/admin |
GCP Cloud Run |
| f3nearme | f3near.me | - | Firebase and Firestore |
| pax-vault | pax-vault.f3nation.com | staging.pax-vault.f3nation.com | Firebase and GCP Big Query |
| the-codex | codex.f3nation.com | - | Firebase |
| f3-org-map | org.f3nation.com | - | GitHub Pages |
| f3-region-pages | regions.f3nation.com | - | Firebase |
| f3-status | status.f3nation.com | - | GitHub Pages |
| f3-nation-slack-bot | slackbot.f3nation.com | Cloud Run | GCP Cloud Run |
| Layer | Technologies |
|---|---|
| Frontend | TypeScript · Next.js · React · Vite · Tailwind CSS · Leaflet |
| Backend | Python (Slack Bolt) · Node.js · Next.js API Routes |
| Database | PostgreSQL (Cloud SQL) · Google BigQuery |
| Auth | NextAuth · Firebase · Custom SSO |
| Infrastructure | Google Cloud Run · Cloud SQL · Firebase · GitHub Pages |
| Dev Tools | PNPM · Turbo · Poetry · Docker |
Not sure where to start? Here are some common entry points:
- 🐛 Fix a bug — Browse open issues across our repos. Look for issues labeled
good first issue. - 🗺️ Frontend / Maps — f3-nation (Next.js monorepo), f3nearme, or f3-org-map (Leaflet)
- 🤖 Slack Bot / Python — f3-nation-slack-bot — the most-used piece of our stack
- 📊 Data & Analytics — pax-vault — BigQuery-powered dashboards
- 🔐 Auth / SSO — f3-nation-auth
- 📖 Content / Knowledge — the-codex — exercises and terminology
- 🏠 Region Websites — f3-region-pages
Each repo has its own README with setup instructions. Jump in, ask questions, and don't worry about breaking things — that's what pull requests are for. For org-wide contributor guidance, see the root .github README.
Our core data model centers around users attending events at organizations (regions, AOs), connected via Slack workspaces:
---
config:
look: handDrawn
theme: dark
---
erDiagram
USERS ||--|{ ATTENDANCE : have
ATTENDANCE }|--|| EVENT_INSTANCES: at
ATTENDANCE }|..|{ ATTENDANCE_TYPES : "are of type(s)"
EVENT_INSTANCES }|..|| EVENTS : "part of series"
EVENT_INSTANCES }|..|{ EVENT_TYPES : "with type(s)"
EVENTS }|..|{ EVENT_TYPES : "with type(s)"
EVENT_INSTANCES }|--|| ORGS : "belong to"
EVENT_INSTANCES }|..|| LOCATIONS : "at"
EVENTS }|--|| ORGS : "belong to"
EVENTS }|..|| LOCATIONS : "at"
SLACK_SPACES ||..|| ORGS : "are connected to"
USERS ||..|{ SLACK_USERS : "have one or more"
SLACK_USERS }|--|| SLACK_SPACES : "belong to"
USERS }|..|{ ACHIEVEMENTS : "earn"
USERS }|..|{ ROLES : "have"
ROLES ||..|{ PERMISSIONS : "have"
ROLES }|..|{ ORGS : "in"
USERS }|..|{ POSITIONS : "hold"
POSITIONS }|..|{ ORGS : "in"