Skip to content

7arnav1/SPONTA

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SPONTA

iOS app for spontaneous challenges and local events — React Native (Expo), Node.js (Express), Firebase, and JWT-secured APIs.

SPONTA helps people try new experiences, complete challenges, and connect with others nearby. We combine structured challenges, events, light gamification, and optional AI-generated challenges.


At a glance (recruiters)

Live demo Screen recording in this README · Google Drive (full quality)
Stack React Native / Expo · Express · Firebase (Auth, Firestore, Storage) · JWT · Google Generative AI (challenge generation & verification flows)
CI (optional) Workflow template in docs/github-actions-ci.yml — copy to .github/workflows/ci.yml and push (GitHub token needs the workflow scope; run gh auth refresh -s workflow if the push is rejected)

Team and roles

We built SPONTA as a four-person team:

Name Focus
Anuvrat Frontend
Suraj Frontend
Arnav Backend, product direction, API design
Sukrit Backend

Arnav — backend, product owner, architecture

Backend: Owned the Express API surface end to end: authentication (Firebase ID tokens, JWT session pattern), REST design for challenges, events, users, notifications, and community posts, Firebase Admin integration, validation and error handling, and AI-assisted challenge generation and verification (Gemini). Middleware (Helmet, CORS, Morgan), operational endpoints such as /health, and structured services/controllers/routes.

Product: Defined the overall app concept, feature priorities, and how flows should feel for users; aligned the team on scope across onboarding, challenges, social, and location-aware experiences.

Collaboration: Coordinated contracts with frontend teammates (payloads, auth headers, error shapes) and documented setup and environment expectations in-repo.


Screenshots

Still frames from the demo recording (see Demo for the full walkthrough).

App screen 1 App screen 2
App screen 3 App screen 4

Demo

The recording below is stored in this repository so it plays inline on GitHub.

SPONTA demo — screen recording

View on Google Drive (full-quality file).


Architecture

flowchart LR
  subgraph client [iOS client]
    Expo[Expo / React Native]
    FB_SDK[Firebase client SDK]
  end
  subgraph backend [Backend]
    API[Express API]
    Admin[Firebase Admin SDK]
    AI[Gemini API]
  end
  subgraph firebase [Firebase]
    Auth[Authentication]
    FS[Firestore]
    Storage[Cloud Storage]
  end
  Expo --> FB_SDK
  Expo -->|HTTPS + JWT| API
  FB_SDK --> Auth
  API --> Admin
  Admin --> FS
  Admin --> Storage
  API --> AI
Loading
  • The mobile app uses Firebase for client auth and talks to Express for domain logic (challenges, events, friends, feed, notifications).
  • The API verifies Firebase ID tokens, issues/refreshes JWTs for API access, and uses Firebase Admin for trusted reads and writes.
  • Sponta AI paths use Google Generative AI for generating challenge ideas and supporting verification-related flows.

What is implemented (backend-focused)

The following reflects the current Express API and supporting services (see backend/src/routes).

Core infrastructure

  • GET /health — service status
  • JSON body parsing, centralized error handling, 404 handler
  • Helmet, CORS, request logging (Morgan)

Authentication (/api/auth)

  • POST /signup, POST /signup-email, POST /signin (with Firebase token)
  • POST /verify-phone, GET /me, POST /refresh-token

Challenges (/api/challenges)

  • List, filter, categories, nearby, daily challenge, detail, user progress
  • POST /:id/accept, POST /:id/complete
  • AI: GET /generate/info, POST /generate, POST /generate/batch

Users (/api/users)

  • Profile get/update, stats, friends (request, accept, remove), completion history

Events (/api/events)

  • List, nearby, detail, participants, create/update/delete (creator), join/leave

Notifications (/api/notifications)

  • List, unread count, mark read / read-all, delete, streak reminder hook

Posts (/api/posts)

  • Community feed, CRUD for posts, likes

Frontend coverage varies by screen; the items above are grounded in the committed server code.


Product roadmap (broader vision)

Later and cross-cutting work includes deeper social (leaderboards, recommendations), richer gamification (badges, rewards store), analytics, and production hardening. Several roadmap themes overlap with partial implementations today; see the API section for what the backend already exposes.


Tech stack

Frontend

  • React Native with Expo (iOS)
  • Firebase (client): Authentication, Firestore, Storage
  • React Navigation, Expo Location / Camera / Notifications, React Hook Form

Backend

  • Node.js, Express
  • Firebase Admin SDK
  • JWT, Helmet, Morgan
  • Google Generative AI (@google/generative-ai) for challenge generation and related services

Platform: iPhone and iPad (iOS).


Repository layout

SPONTA/
├── frontend/
├── backend/
│   ├── server.js
│   └── src/
│       ├── routes/
│       ├── controllers/
│       ├── services/
│       ├── middleware/
│       ├── models/
│       └── config/
├── docs/
│   ├── sponta-demo.mp4
│   └── screenshots/
├── CONTRIBUTING.md
├── SETUP.md
└── README.md

Quick start (minimal path)

git clone https://github.com/7arnav1/SPONTA.git
cd SPONTA

# Backend API (from repo root)
cd backend && npm install
# Create backend/.env from SETUP.md (Firebase Admin, JWT secret, ports, AI keys as needed).
npm start

# New terminal — iOS app (macOS + Xcode / Simulator recommended)
cd frontend && npm install && npm run ios

Firebase project, GoogleService-Info.plist, and backend .env values are required for a fully working stack. Full steps: SETUP.md.


Branching and workflow

We use feature branches and personal branches (anuvrat, arnav, sukrit, suraj). Integrate via pull requests into the team’s mainline (main or final-main on this fork). See CONTRIBUTING.md.


iOS requirements

  • Minimum iOS 13+
  • Expo Go or dev build; Xcode for Simulator
  • EAS Build / App Store Connect when shipping

Firebase (summary)

Create a Firebase project, enable Auth (including phone as configured), Firestore, and Storage; register the iOS app (com.sponta.app); add a backend service account to .env. Details: SETUP.md.


How we develop

  • Meaningful commits and clear PR descriptions
  • Branching model above; reviews before merge
  • Manual testing on Simulator and devices; API checks with curl or Postman
  • Optional CI: see docs/github-actions-ci.yml

Security

  • Do not commit .env or service account keys
  • Validate inputs on the server; authenticate protected routes consistently

References


License

This project is private and proprietary.


Contributing

Team workflow and CI expectations: CONTRIBUTING.md.

About

iOS app for spontaneous challenges & events — React Native, Express, Firebase, JWT. Demo & screenshots in README.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages