The first document AI should read when encountering the project for the first time
JAMMING - An ensemble/jam session matching mobile web platform for musicians
A service that simplifies the process of finding partners to play with, hosting jam sessions, or joining them.
| Item | Details |
|---|---|
| Service URL | https://jamming.co.kr |
| Platform | Mobile web (PWA) |
| Main target | Amateur/hobbyist musicians in Korea |
- Simplified matching: Enable musicians to meet easily based on region
- Respect for diversity: Anyone can participate regardless of genre or skill level
- Mobile optimization: Quickly check/apply for sessions anytime, anywhere
An ensemble gathering hosted by a host.
// Core fields
{
title: string; // Session title (5-20 chars)
body: string; // Detailed description (max 1000 chars)
datetime: string; // Date and time
location: LocationEnum[]; // Region (multiple selection)
location_detail: { // Exact venue
name: string;
address: string;
};
genre: GenreEnum[]; // Genre (multiple selection)
level: LevelEnum[]; // Skill level (multiple selection)
headcnt_by_pos: Array<{ // Headcount by position
pos: PositionEnum;
headcnt: number;
}>;
songs: Array<{ // List of songs to play
title: string;
artist: string;
}>;
}A user's application to join a jam session.
{
jam_id: number; // Session to apply for
user_id: string; // Applicant
appeal: string; // Self-introduction
applied_pos: PositionEnum; // Position applied for
is_allowed: boolean; // Host approval status
is_rejam: boolean; // Rejam (re-application) status
}Flow:
- User applies from the session detail page
- Host reviews the application list and approves/rejects
- Only approved users are confirmed to participate
{
nickname: string; // Nickname (1-8 chars, English/Korean/numbers)
profile_image: string; // Profile image URL
pos: PositionEnum; // Main position
genre: GenreEnum; // Preferred genre
level: LevelEnum; // Skill level
location: LocationEnum; // Active region
tags: string[]; // Tags (#rock, #blues, etc.)
bpm: number; // BPM (optional)
}Genre (GenreEnum)
- General, Rock, Pop, Indie, Jazz, Funk, Metal
Position (PositionEnum)
- Guitar, Bass, Drums, Vocals, Keyboard, Other
Level (LevelEnum)
- Pro, Amateur, Study, Hobby
Region (LocationEnum)
- All, Seoul, Northern Gyeonggi, Southern Gyeonggi, Incheon, Busan, Daegu, Daejeon, Gwangju, Ulsan, Sejong, Gangwon, North Chungcheong, South Chungcheong, North Jeolla, South Jeolla, North Gyeongsang, South Gyeongsang, Jeju (19 total)
- Viewport constraints:
min-width: 375px,max-width: 600px - Touch optimization: Bottom Sheet, swipe gesture support
- Not responsive: Mobile-only layout
The area where the most debugging resources were invested in the project.
- Prevent auto-zoom:
maximum-scale=1setting - Address bar height handling: Dynamic calculation via the
--vhCSS variable - Scroll behavior optimization:
overflow-without-scrollclass - Controlling screen movement during keyboard input
| Item | Version/Tech | Notes |
|---|---|---|
| Framework | Next.js 16 | Uses App Router |
| React | 19 RC | RC version |
| Tailwind | 4 | Latest version |
| Backend | Supabase | Integrated Auth, DB, Storage |
| Deployment | Vercel | Analytics enabled |
- ManiaDB: Song search (Korean music DB)
- Naver Map: Venue search (Local Search API)
- Kakao: OAuth login
- Architecture - System structure
- Patterns - Code patterns
- Design - Design system guide
- Reference - API/schema reference