OUT is an app that makes raising children together in the city as effortless as possible. It helps parents discover spontaneous opportunities to connect with their community - from open doors at neighbors' houses to impromptu playground meetups.
Note: This repository contains the source code for a Val Town application. It's primarily intended for code sharing and AI tool access. The application is designed to run on Val Town's platform.
The app solves the "computational problem" of parenting social coordination by knowing:
- Where everyone is and what they're up for
- What sort of hanging out they want (energy levels, social circles)
- How to get there and the effort required
- What affordances exist for childcare at each location
- Passwordless login: Sign in with just your email address
- Magic links: Receive secure login links via email (15-minute expiration)
- Persistent sessions: Stay logged in across browser sessions
- Easy account recovery: No passwords to forget or reset
- Old Pals: Effortless, energizing relationships - see all your activities
- Friends: Some energy required but enjoyable bonds - see friend and old pal activities
- New Friends: Getting-to-know-you relationships - see activities targeted to all circles
- Open Door: "Come over anytime" invitations with duration
- Public Outings: Scheduled activities anyone can join
- Private Outings: Planned activities for specific circles
- Help Requests: Mutual aid opportunities
- Distance-based filtering: Only see activities within reasonable travel time
- Transport optimization: Calculates best travel mode (walk, bike, transit, car)
- Social targeting: Only see activities from people in your circles
- Natural language: "Go to Bob's place (5 min bike ride)"
- Add friends by email: No more cryptic user IDs - just enter their email
- Drag & drop organization: Move friends between circles by dragging their cards
- Remove friends: Drag to trash zone to stop sharing activities
- Visual interface: See all your social connections organized by intimacy level
βββ backend/
β βββ database/
β β βββ migrations.ts # Database schema setup
β β βββ queries.ts # Database query functions
β βββ routes/
β β βββ users.ts # User management endpoints
β β βββ activities.ts # Activity management endpoints
β β βββ static.ts # Static file serving
β βββ index.ts # Main Hono app entry point
βββ frontend/
β βββ components/
β β βββ App.tsx # Main React app
β β βββ ActivityList.tsx # List of available activities
β β βββ CreateActivity.tsx # Form to create new activities
β β βββ FriendsManager.tsx # Manage social circles and friends
β β βββ UserSetup.tsx # Initial user registration
β βββ index.html # Main HTML template
β βββ index.tsx # Frontend entry point
β βββ style.css # Styling
βββ shared/
β βββ types.ts # Shared TypeScript types
βββ README.md
- Backend: Hono (lightweight web framework)
- Database: Val Town SQLite
- Frontend: React with TypeScript
- Styling: TailwindCSS
- Deployment: Val Town
This project is designed to run on Val Town, a platform for hosting serverless TypeScript applications.
- A Val Town account
- Basic knowledge of TypeScript/React
- Import the project: Copy all files to your Val Town workspace
- Set up the database: The SQLite database will be automatically created when you first run the app
- Configure environment variables: Set up any required environment variables in Val Town
- Deploy: The main entry point is
backend/index.ts
which serves both the API and the frontend
While this project is optimized for Val Town, you can explore the code locally:
# Clone the repository git clone <your-repo-url> cd OUT-app # Install dependencies (for IDE support) npm install # Note: This project uses Val Town's runtime and won't run locally without modifications
This project uses several Val Town-specific features:
- SQLite database: Via
@stevekrouse/sqlite
- Blob storage: Via
@std/blob
- Email service: Via
@std/email
- File utilities: Via
@std/utils
POST /api/auth/login
- Request magic link login emailPOST /api/auth/verify
- Verify login token from email link
POST /api/users
- Register a new userGET /api/users/:id
- Get user informationPUT /api/users/:id
- Update user informationPOST /api/users/:id/friends
- Add friend by emailPUT /api/users/:id/friends/:friendId
- Move friend to different circleDELETE /api/users/:id/friends/:friendId
- Remove friend from all circles
POST /api/activities
- Broadcast a new activityGET /api/activities/:id
- Get activity detailsPUT /api/activities/:id/deactivate
- Deactivate an activityGET /api/activities/owner/:ownerId
- Get activities by owner
GET /api/discovery/:userId
- Get available options for a userGET /api/discovery/:userId/formatted
- Get formatted options with natural language
- Basic profile information
- Location and transport modes
- Social circles (old pals, friends, new friends)
- Children information and sleep schedules
- Type (open_door, public_outing, private_outing, help_request)
- Location and timing information
- Target audience (which social circles can see it)
- Affordances (bathroom, shade, food, etc.)
- Real-time updates via WebSockets
- Google Calendar and Huckleberry integrations
- Push notifications
- In-app messaging
- Recurring activities
- User feedback and ratings