Skip to content

About

AI-powered internship matching and application assistant for students, built for RevenueCat Shipaton 2026.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

InternMatch AI app icon

# InternMatch AI

InternMatch AI is a multilingual internship platform connecting students, employers, and a human-operated administrative trust layer in one end-to-end workflow.

It combines structured candidate profiles, private CV intelligence, explainable hybrid matching, AI-assisted application preparation, employer recruiting tools, moderated opportunity publishing, and RevenueCat-backed subscription surfaces.

Product website: https://internmatch.college/

Technical documentation: Architecture · Security

Apple App Store: https://apps.apple.com/us/app/internmatch-ai/id6809902796

Google Play: https://play.google.com/store/apps/details?id=com.aissclub.internmatchai

Why InternMatch AI

Students often have to infer fit from long job descriptions, repeatedly rewrite application materials, and receive little actionable guidance about skill gaps. Employers need a structured way to publish internships, review candidates, and manage interviews without sacrificing trust controls. InternMatch AI addresses both sides while keeping publication and verification decisions server-controlled.

Product Surfaces

Student / Candidate

  • Email/password authentication, email confirmation, recovery, Google OAuth, and Sign in with Apple on iOS.
  • Structured profile covering skills, education, experience, projects, and preferences.
  • Private CV upload with asynchronous parsing and profile extraction.
  • Internship discovery with work-type filtering and saved opportunities.
  • Hybrid matching that combines exact/fuzzy skill overlap, semantic similarity, and profile preferences.
  • Why You Match explanations, matching/missing skills, and skill-gap guidance.
  • AI-assisted cover-letter drafting and interview preparation.
  • Application tracking across saved, applied, interviewing, accepted, and rejected states.
  • Durable in-app notifications plus Expo push-device registration and push delivery.
  • English, Turkish, and Arabic localization, including RTL layout for Arabic.
  • Student Pro functionality with backend-controlled AI usage allowances.
  • Account/privacy controls including recent reauthentication before permanent account deletion.

Employer

  • Role-aware employer account flow using email/password authentication.
  • Organization workspace with business identity and representative details.
  • Organization verification workflow separated from compliance-evidence review.
  • Opportunity creation and owned-listing management.
  • Applicant review, candidate context, status transitions, CV access through authenticated server boundaries, and interview scheduling.
  • Employer candidate insight with separately enforced AI usage quotas.
  • Employer Pro tools for interview kits, shortlist comparison, AI-assisted internship-description drafting, pipeline analytics, and multiple published listings.
  • Employer Free supports one published internship at a time; subscription/product policy is enforced by the backend.
  • Mandatory listing moderation before employer-generated opportunities become public.

Admin Trust & Safety Console

  • Backend-enforced admin authorization.
  • Employer organization review.
  • Employer compliance-evidence review as a separate trust domain.
  • Internship moderation with approval and request-changes workflows.
  • User directory/search with student/employer context and administrative audit history.
  • Admin-managed opportunity and applicant workflows where applicable.

Listing Moderation Lifecycle

Employer organization verification does not automatically publish an opportunity. Employer-generated listings move through an explicit moderation lifecycle:

Employer create / edit
        |
        v
   under_review  ---- Admin approves ----> published
        |
        +---- Admin requests changes ----> draft
                                            |
                                            +--> owner-visible feedback
                                            +--> existing fields prefilled
                                            +--> employer edits and resubmits
                                            v
                                       under_review

employer_visible_feedback is owner-only. It is not part of the public internship response, and previous feedback is cleared after a successful employer resubmission.

Matching & AI Architecture

InternMatch AI keeps deterministic scoring separate from generative explanation:

  • Exact and fuzzy skill matching with configurable fuzzy threshold.
  • Semantic similarity using one configured canonical embedding provider, persisted in PostgreSQL with pgvector.
  • Candidate preference contribution for work type/location where applicable.
  • Server-side Gemini workflows for CV extraction, match explanations, cover-letter drafting, and interview preparation.
  • Redis + RQ for asynchronous processing where the workflow is background-oriented.
  • Backend-controlled AI quotas and idempotency protections.

The persisted match score is computed by application logic; generative AI explains the result but does not autonomously decide who should be hired.

RevenueCat Monetization

InternMatch AI uses react-native-purchases 10.7.2 and supports both student and employer subscription contracts.

Audience Entitlement Offering Package Canonical Product
Student pro_student default $rc_monthly internmatch_pro_student_monthly
Employer pro_employer employer_default $rc_monthly internmatch_pro_employer_monthly

The mobile SDK resolves store packages dynamically. Development can use a RevenueCat Test Store public key, while release builds use platform-specific public SDK keys for iOS and Android.

Subscription authority is not client-only. The backend exposes authenticated subscription state and reconciliation, and it processes authenticated RevenueCat lifecycle webhooks:

  • GET /api/v1/me/subscription
  • POST /api/v1/me/subscription/reconcile
  • POST /api/v1/webhooks/revenuecat

The server-side RevenueCat secret is never a mobile credential. Webhook Bearer authentication is enforced by the configured server contract; HMAC signature/timestamp verification additionally applies when a signing secret is configured.

The custom mobile promo-code UI that directly unlocked Pro was removed from the current store application. Backend/admin promo source still exists in the repository, but migration 028_promo_campaigns.sql is not part of the current production-applied release baseline.

Architecture Overview

flowchart LR
    Mobile[Expo / React Native Mobile] -->|Supabase session| Auth[Supabase Auth]
    Mobile -->|Bearer JWT| API[FastAPI API]
    Admin[Next.js Admin Console] -->|Bearer JWT| API
    Admin --> Auth
    API --> DB[(Supabase PostgreSQL + pgvector)]
    API --> Storage[(Supabase Storage)]
    API --> Redis[(Redis)]
    Redis --> Worker[RQ Worker]
    Worker --> Gemini[Google Gemini]
    Worker --> DB
    Mobile --> RC[RevenueCat SDK]
    API --> RCAPI[RevenueCat Server API / Webhook]
Loading

For faithful full-stack development, the application depends on Supabase-managed Auth and Storage in addition to PostgreSQL. The plain pgvector PostgreSQL container in docker-compose.yml is useful for isolated development/testing scenarios, but it is not a complete replacement for a Supabase project because the full schema references resources such as auth.users.

Technology Stack

Domain Current Stack
Mobile Expo SDK 57, React Native 0.86.3, React 19.2.3, TypeScript ~6.0, React Navigation
Admin Next.js 15.5.x, React 18, TypeScript
Authentication Supabase Auth / JWT
Backend FastAPI, Python 3.13 CI reference runtime, SQLAlchemy, Pydantic
Data Supabase PostgreSQL, pgvector, Supabase Storage
Async Redis 7, RQ worker
AI Gemini generation + configurable canonical embedding provider (OpenAI or Gemini)
Monetization RevenueCat React Native SDK + backend reconciliation/webhook integration
CI / Release GitHub Actions, Docker / Docker Compose, EAS Build

Repository Structure

.
├── apps/
│   ├── admin/              # Next.js Trust & Safety Console
│   ├── landing/            # Legal/support web source in this repository
│   └── mobile/             # Expo / React Native student + employer app
├── backend/                # FastAPI API, repositories, services, security
├── database/               # Migrations, seeds, storage setup
├── docs/                   # Architecture, security, API, database, runbooks
├── scripts/                # Development/maintenance utilities
├── tests/                  # Pytest and source-contract coverage
├── worker/                 # RQ background tasks
└── docker-compose.yml      # Optional local container orchestration

Migration source currently spans 001 through 028. The release execution baseline is through 027; migration 028_promo_campaigns.sql exists in source but is not part of the current production-applied baseline and must not be blindly applied.

Development Quick Start

Use a development Supabase project for faithful full-stack reproduction. Do not use production as a development or test environment.

cp .env.example .env

docker compose up --build -d

docker-compose.yml provides backend, worker, Redis, and a local pgvector PostgreSQL service. The full application schema, however, depends on Supabase Auth/Storage; point server Supabase credentials and DATABASE_URL to a development Supabase project when reproducing the complete product.

For the mobile application:

cd apps/mobile
cp .env.example .env
npm ci
npx expo run:android

Expo Go is not sufficient for native RevenueCat functionality. On macOS, native iOS development can use npx expo run:ios.

Environment & Secret Boundaries

  • Root .env: server-only configuration and secrets.
  • apps/mobile/.env: public client configuration (EXPO_PUBLIC_* is readable in the client bundle).
  • apps/admin/.env.local: public Admin client configuration; backend admin authorization is still server-enforced.
  • Never place Supabase service-role credentials, RevenueCat server secrets, webhook secrets, database passwords, or Apple private keys in mobile/admin public environment variables.

Automated Quality Checks

CI uses Python 3.13 and Node.js 22 as reference runtimes.

python -m pytest
python -m ruff check backend/app worker tests --output-format=concise

cd apps/mobile
npx tsc --noEmit

cd ../admin
npm ci
npm run typecheck

Production API Policy

  • Root liveness: GET /health
  • Versioned readiness: GET /api/v1/health (database + Redis + RQ worker; returns HTTP 503 if a required dependency is unavailable)
  • Swagger UI, ReDoc, and /openapi.json are intentionally disabled when ENVIRONMENT=production.

Documentation

Demo & Store Links

Resource Link / Status
Product website https://internmatch.college/
Source repository Access by invitation
Demo video https://youtu.be/FOoJVTpqCOg?feature=shared
Apple App Store https://apps.apple.com/us/app/internmatch-ai/id6809902796
Google Play https://play.google.com/store/apps/details?id=com.aissclub.internmatchai

The demo is a brief product overview. The technical documentation describes the implementation in more detail.

Team

InternMatch AI was conceived and developed by Mohamad Barakat and Selenur Yurdakul.

Selenur Yurdakul originated the InternMatch AI product concept and created the initial frontend prototype, mobile screen layouts, visual direction, and UI foundation.

Mohamad Barakat led the technical architecture and end-to-end engineering, transformed and substantially expanded the initial prototype into the final product, designed the product UX flows, and built the backend, database/vector systems, AI and matching systems, RevenueCat integration, Employer platform, Admin Trust & Safety Console, email automation, infrastructure, security, testing, and release workflows.

Both contributed to shaping and refining the overall product. Any commercial proceeds allocation is a separate agreement between the contributors; code similarity and this credit do not define ownership shares.

License

Licensed under the MIT License.

About

AI-powered internship matching and application assistant for students, built for RevenueCat Shipaton 2026.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages