Pin is a social map app for discovering nearby social pins, seeing event memories, reacting to mutuals, and building mutual vibe streaks.
This repository now contains:
- The original HTML/CSS prototype:
frontend/index.html,frontend/styles.css - Frontend app code under
frontend/ - A new Expo/React Native mobile app foundation
- Static MVP screens for Pins, Memories, Settings, create-pin flow, mutual DMs, notifications, and vibe streaks
- Backend API code under
backend/ - A local Node.js API scaffold under
backend/server/with seed data and Android-ready endpoints - PostgreSQL schema draft:
backend/server/schema.sql
The app is planned to avoid paid third-party subscriptions and paid APIs, except:
- Apple Developer Program fee
- Google Play Console fee
Recommended production architecture:
- Mobile app: React Native + Expo
- Backend: Node.js/Express or NestJS
- Database: PostgreSQL
- Media storage: self-hosted MinIO
- Maps: OpenStreetMap-based tiles/routing, self-hosted where needed
- Push notifications: APNs and Firebase Cloud Messaging
- Moderation: in-house report queue and admin dashboard
Install dependencies:
npm installStart the local API:
npm run apiIn another terminal, start the Android app:
npm run androidFor an Android emulator, the app uses:
http://10.0.2.2:3101
For web/local preview, set:
$env:EXPO_PUBLIC_API_URL='http://127.0.0.1:3101'Prebuild Android native project:
npm run android:prebuildInstall/run on device or emulator:
npm run android:deviceCreate a debug APK after Android Studio/SDK is configured:
npm run android:apk:debugCreate a release AAB after signing is configured:
npm run android:aab:release- Account deletion
- Report pin, report memory, report user
- Block user
- Published community rules
- Privacy policy and support URL
- Reviewer demo account
- Location/camera permission explanations
- UGC moderation queue
Current implemented local endpoints:
GET /healthGET /api/bootstrapPOST /api/auth/signupPOST /api/auth/loginPOST /api/auth/logoutPOST /api/pinsPOST /api/pins/:id/pull-upPOST /api/memoriesPOST /api/memories/:id/reactionsPOST /api/users/:id/followPOST /api/reportsPOST /api/blocksPOST /api/dmsGET /api/admin/reportsDELETE /api/account