THE Beer Superapp. All of beer, one app.
Website | Product tour | Architecture | Build and test | Security
Tapt is a native iOS product for discovering real beers, scanning supported labels and barcodes, logging pours to a Cellar, collecting a location-aware Passport, following a live Beer Market, and finding beer venues worldwide.
Stack: Swift 6, SwiftUI, Supabase (Postgres, PostGIS, Auth, Storage, Edge Functions), MapKit, XcodeGen, Python, Deno, and GitHub Actions.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Beer radar: provenance-backed venues, MapKit search, and PostGIS nearby feeds
- Catalog: normalized beer identities, sourced product media, barcode resolution, style data, and nutrition where available
- Beer Market: standings derived from season, cited awards, catalog context, and first-party votes and pours
- Cellar and Passport: distinct-beer progress across styles, states, and countries
- Social: profiles, follows, a Tonight feed, reporting, blocking, and privacy-respecting public aggregates
- Partner tools: venue claims, hosted menus, printable QR pages, events, and analytics
- Beer School and games: verified beer education plus local table games
Tapt never fabricates products, venues, rankings, ratings, votes, movement, or product imagery. Every venue carries coordinates and provenance. Beer Market numbers are computed from real inputs. Empty states remain empty until real activity exists.
flowchart LR
App["SwiftUI iOS app"] --> Auth["Supabase Auth"]
App --> API["Postgres RPC boundary"]
App --> Maps["MapKit and PostGIS"]
App --> Storage["Reviewed media storage"]
Web["Static partner and public web"] --> API
Web --> Storage
Sources["Licensed public data sources"] --> Jobs["Validated ingestion jobs"]
Jobs --> DB["Postgres data model"]
DB --> API
Signals["First-party votes and pours"] --> Scores["Materialized market standings"]
Scores --> API
Actions["GitHub Actions"] --> Tests["Build, tests, and release integrity"]
Tests --> TestFlight["Manual TestFlight release lane"]
The client does not receive service-role credentials. Sensitive operations are implemented behind authenticated Edge Functions or narrowly granted RPCs. Public analytics use coarse aggregates and honor visibility, block, and consent boundaries.
| Path | Purpose |
|---|---|
app/ |
Native SwiftUI application, tests, privacy manifest, and XcodeGen spec |
supabase/ |
Versioned schema migrations, Edge Functions, and database contracts |
landing/ |
Public site, partner portal, menus, and owner operations surfaces |
scripts/ |
Reproducible ingestion, verification, image, and App Store tooling |
docs/ |
Product, architecture, privacy, data-source, and release decisions |
.github/workflows/ |
CI, data maintenance, TestFlight, and App Store release gates |
Requirements: macOS, a current Xcode installation, and XcodeGen.
cd app
xcodegen generate
xcodebuild test \
-project Tapt.xcodeproj \
-scheme Tapt \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro'Useful repository-level validation:
python -m unittest discover -s scripts -p 'test_*.py'
python -m compileall -q scriptsCopy .env.example only for the supported local tools that require it. Never commit credentials.
build.ymlcompiles and tests app changes on pushes and pull requests.release-integrity.ymlvalidates Python, workflows, Edge Functions, admin code, and the live anonymous RPC contract.testflight.ymlperforms a manual signed archive and TestFlight upload.- App Store preparation, audit, screenshot, submission, and withdrawal workflows are separate explicit lanes.
Tapt 1.0 is in the App Store release process. The public site is live at taptbeer.com. See the commit history and pull requests for current release evidence.
Read CONTRIBUTING.md before proposing a change. Report vulnerabilities privately using SECURITY.md, not through a public issue.
Copyright 2026 Erick Dronski. The source is publicly visible for evaluation and collaboration, but no license to copy, redistribute, or create derivative works is granted. See LICENSE.





