Skip to content

lee-mark01/teamplan-it

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Teamplan-it Logo

Teamplan-it

νŒ€μž₯ μ—†λŠ” νŒ€ν”Œμ˜ μ‹œμž‘

AIκ°€ νŒ€μž₯ 역할을 λŒ€μ‹ ν•˜μ—¬, λͺ¨λ“  νŒ€μ›μ΄ λ™λ“±ν•˜κ²Œ ν˜‘μ—…ν•  수 μžˆλŠ” νŒ€ ν”„λ‘œμ νŠΈ 관리 μ„œλΉ„μŠ€

Deploy Next.js Supabase Gemini

μ„œλΉ„μŠ€ λ°”λ‘œκ°€κΈ° Β· λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ 아이디어톀 정보


λͺ©μ°¨

μ†Œκ°œ

Teamplan-it은 λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ μ•„μ΄λ””μ–΄ν†€μ—μ„œ νƒ„μƒν•œ μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

λŒ€ν•™κ΅ νŒ€ν”Œμ—μ„œ 맀번 λ°˜λ³΅λ˜λŠ” 문제 β€” "λˆ„κ°€ νŒ€μž₯ ν•  κ±°μ•Ό?", "일정은 μ–΄λ–»κ²Œ μ§œμ§€?", "λˆ„κ°€ 뭘 λ§‘μ•„?" β€” λ₯Ό AI둜 ν•΄κ²°ν•©λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ 정보와 νŒ€μ›μ˜ κ°•μ λ§Œ μž…λ ₯ν•˜λ©΄, AIκ°€ 과업을 λΆ„ν•΄ν•˜κ³ , μ˜μ‘΄μ„±μ„ λΆ„μ„ν•˜κ³ , νŒ€μ›λ³„ 졜적 일정을 μžλ™μœΌλ‘œ λ°°μ •ν•©λ‹ˆλ‹€.

더 이상 νŒ€μž₯μ΄λΌλŠ” λΆ€λ‹΄ 없이, λͺ¨λ‘κ°€ λ™λ“±ν•œ νŒ€μ›μœΌλ‘œ ν”„λ‘œμ νŠΈμ— 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯

AI κ³Όμ—… 뢄석 및 μžλ™ λ°°μ •

ν”„λ‘œμ νŠΈ μ„€λͺ…κ³Ό νŒ€μ›μ˜ 강점, κ°€μš© μ‹œκ°„μ„ 기반으둜 AIκ°€ 과업을 λΆ„ν•΄ν•˜κ³  졜적의 λ‹΄λ‹Ήμžλ₯Ό λ°°μ •ν•©λ‹ˆλ‹€. μ˜μ‘΄μ„± κ·Έλž˜ν”„λ₯Ό μƒμ„±ν•˜μ—¬ μž‘μ—… μˆœμ„œλ₯Ό μžλ™μœΌλ‘œ μ„€κ³„ν•©λ‹ˆλ‹€.

νŒ€ νƒ€μž„λΌμΈ (Gantt 차트)

νŒ€μ›λ³„ μž‘μ—… 일정을 ν•œλˆˆμ— μ‹œκ°ν™”ν•©λ‹ˆλ‹€. 총 μž‘μ—… 수, μ§„ν–‰ 상황, μ™„λ£Œμœ¨, 남은 일수λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

AI μ±„νŒ… μ½”μΉ­

AI λ§€λ‹ˆμ €κ°€ 각 νŒ€μ›μ—κ²Œ λ§žμΆ€ν˜• 업무 μ•ˆλ‚΄μ™€ 동기뢀여λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ±„νŒ…μœΌλ‘œ μ§„ν–‰ 상황을 λ³΄κ³ ν•˜λ©΄ 진척도가 μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€.

λŒ€μ‹œλ³΄λ“œ & 진척도 관리

ν”„λ‘œμ νŠΈ 진척도, λ‚΄ 체크리슀트, AI 쑰언을 ν•œ ν™”λ©΄μ—μ„œ ν™•μΈν•©λ‹ˆλ‹€. νŒ€ 전체와 개인의 μ§„ν–‰λ₯ μ„ 링 차트둜 μ§κ΄€μ μœΌλ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.

νŒ€μ› μ΄ˆλŒ€ & μ˜¨λ³΄λ”©

μ΄ˆλŒ€ 링크 λ˜λŠ” μ΄λ©”μΌλ‘œ νŒ€μ›μ„ μ΄ˆλŒ€ν•©λ‹ˆλ‹€. 각 νŒ€μ›μ΄ μžμ‹ μ˜ 강점, μ„ ν˜Έ μ‹œκ°„λŒ€, κ°€μš© μ‹œκ°„μ„ 직접 μž…λ ₯ν•˜λ©΄ AI 뢄석에 λ°˜μ˜λ©λ‹ˆλ‹€.

μŠ€ν¬λ¦°μƒ·

λžœλ”© νŽ˜μ΄μ§€

λžœλ”© νŽ˜μ΄μ§€

ν”„λ‘œμ νŠΈ 생성

ν”„λ‘œμ νŠΈ 생성

νŒ€μ› 정보 μž…λ ₯

νŒ€μ› 정보 μž…λ ₯

AI 뢄석 쀑

AI 뢄석 쀑

AI 뢄석 κ²°κ³Ό

AI 뢄석 κ²°κ³Ό

λŒ€μ‹œλ³΄λ“œ

λŒ€μ‹œλ³΄λ“œ

νƒ€μž„λΌμΈ (Gantt 차트)

νƒ€μž„λΌμΈ

AI μ±„νŒ…

AI μ±„νŒ…

기술 μŠ€νƒ

λΆ„λ₯˜ 기술
ν”„λ ˆμž„μ›Œν¬ Next.js 16 (App Router), React 19
μ–Έμ–΄ TypeScript
μŠ€νƒ€μΌλ§ Tailwind CSS 4
λ°μ΄ν„°λ² μ΄μŠ€ Supabase (PostgreSQL)
인증 Supabase Auth
파일 μ €μž₯μ†Œ Supabase Storage
AI Google Gemini 2.5 Flash
이메일 Resend
배포 Vercel

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

Client β†’ Next.js API Routes β†’ μ™ΈλΆ€ μ„œλΉ„μŠ€ 3계측 ꡬ쑰. Supabaseκ°€ Auth, DB, Storageλ₯Ό λͺ¨λ‘ λ‹΄λ‹Ήν•˜λ©°, Gemini APIλŠ” DBμ—μ„œ ν”„λ‘œμ νŠΈΒ·νŒ€μ› 데이터λ₯Ό 읽어 κ³Όμ—… 뢄석에 ν™œμš©ν•©λ‹ˆλ‹€.

데이터 λͺ¨λΈ (ERD)

총 9개 ν…Œμ΄λΈ” 섀계. ν”„λ‘œμ νŠΈ-νŒ€μ›-κ³Όμ—… μ€‘μ‹¬μ˜ μ •κ·œν™”λœ μŠ€ν‚€λ§ˆ.

erDiagram
    profiles ||--o{ projects : "owns"
    profiles ||--o{ project_members : "joins"
    projects ||--o{ project_members : "has"
    projects ||--o{ tasks : "contains"
    projects ||--o{ chat_messages : "has"
    projects ||--o{ analysis_snapshots : "tracks"
    projects ||--o{ files : "stores"
    projects ||--o{ invitations : "issues"
    project_members ||--o{ tasks : "assigned"
    project_members ||--o{ chat_messages : "sends"
    project_members ||--o{ files : "uploads"
    tasks ||--o{ task_checklists : "has"

    profiles {
        uuid id PK
        text display_name
        text email
    }

    projects {
        uuid id PK
        text name
        text description
        text goal
        text deliverable
        date start_date
        date end_date
        text constraints
        text document_url
        boolean is_private
        enum status
        uuid owner_id FK
        timestamp created_at
    }

    project_members {
        uuid id PK
        uuid project_id FK
        uuid user_id FK
        text display_name
        text major_or_part
        array strengths
        array time_slots
        text hours_per_week
        enum color
        enum role
        boolean info_completed
        timestamp joined_at
    }

    tasks {
        uuid id PK
        uuid project_id FK
        uuid assignee_id FK
        text label
        enum category
        integer progress
        enum status
        date start_date
        date end_date
        array depends_on
        integer sort_order
        timestamp updated_at
    }

    task_checklists {
        uuid id PK
        uuid task_id FK
        text content
        boolean is_completed
        timestamp completed_at
        integer sort_order
    }

    chat_messages {
        uuid id PK
        uuid project_id FK
        uuid sender_id FK
        enum role
        text content
        jsonb metadata
        timestamp created_at
    }

    analysis_snapshots {
        uuid id PK
        uuid project_id FK
        jsonb result_json
        boolean is_active
        timestamp created_at
    }

    files {
        uuid id PK
        uuid project_id FK
        uuid uploader_id FK
        text file_name
        text storage_path
        text mime_type
        integer size_bytes
        timestamp created_at
    }

    invitations {
        uuid id PK
        uuid project_id FK
        text token UK
        text email
        enum status
        timestamp expires_at
        timestamp created_at
    }
Loading

AI νŒŒμ΄ν”„λΌμΈ

κ³Όμ—… 뢄석 (/api/analyze)

ν”„λ‘œμ νŠΈ 정보와 νŒ€μ› 데이터λ₯Ό Gemini API에 μ „λ‹¬ν•˜μ—¬ 과업을 μžλ™ λΆ„ν•΄Β·λ°°μ •ν•©λ‹ˆλ‹€.

μž…λ ₯ 데이터:

  • ν”„λ‘œμ νŠΈ 기본정보 (이름, μ„€λͺ…, λͺ©ν‘œ, μ‚°μΆœλ¬Ό, κΈ°κ°„, μ œμ•½μ‚¬ν•­)
  • νŒ€μ› 정보 (이름, 전곡, 강점, μ„ ν˜Έ μ‹œκ°„λŒ€, μ£Όλ‹Ή κ°€μš©μ‹œκ°„)
  • 첨뢀 λ¬Έμ„œ (PDF, 이미지 λ“± β€” Base64 μΈμ½”λ”©ν•˜μ—¬ Gemini에 전달)

좜λ ₯ ꡬ쑰 (JSON Schema κ°•μ œ):

{
  "nodes": [
    { "id": "task_1", "label": "API 섀계", "day": "Day 4-7",
      "assignee": "이승희", "category": "backend", "dependsOn": ["task_0"] }
  ],
  "timelines": [
    { "memberName": "이승희", "bars": [
        { "label": "API 섀계", "startPercent": 10, "widthPercent": 20 }
    ]}
  ],
  "checklists": { "task_1": ["μš”κ΅¬μ‚¬ν•­ 뢄석", "API λͺ…μ„Έ μž‘μ„±", "리뷰"] },
  "comment": "각 νŒ€μ›μ˜ 강점과 μ‹œκ°„λŒ€λ₯Ό κ³ λ €ν•˜μ—¬ λ°°μ •ν–ˆμŠ΅λ‹ˆλ‹€..."
}

μ•ˆμ •μ„± 확보:

  • responseSchema둜 JSON ꡬ쑰 κ°•μ œ (Structured Output)
  • 응닡 μ‹€νŒ¨ μ‹œ μ΅œλŒ€ 3회 μž¬μ‹œλ„ (μ˜¨λ„ 0.7 β†’ 0.3 ν•˜ν–₯)
  • λΆˆμ™„μ „ν•œ JSON μžλ™ 볡ꡬ (λ―Έμ’…λ£Œ λ¬Έμžμ—΄, λ‹«νžˆμ§€ μ•Šμ€ κ΄„ν˜Έ 처리)
  • IPλ‹Ή λΆ„λ‹Ή 5회 Rate Limiting

AI μ±„νŒ… μ½”μΉ­ (/api/chat)

νŒ€μ›κ³Όμ˜ λŒ€ν™”μ—μ„œ μ§„ν–‰ 상황을 μžλ™μœΌλ‘œ κ°μ§€ν•˜κ³  μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

μžλ™ μ§„ν–‰λ₯  μ—…λ°μ΄νŠΈ: AI 응닡에 [PROGRESS_UPDATE] νƒœκ·Έκ°€ ν¬ν•¨λ˜λ©΄ ν•΄λ‹Ή κ³Όμ—…μ˜ μ§„ν–‰λ₯ κ³Ό μƒνƒœλ₯Ό μžλ™ λ³€κ²½ (todo β†’ in_progress β†’ done)

μžλ™ 체크리슀트 μ™„λ£Œ: [CHECKLIST_UPDATE] νƒœκ·Έλ‘œ 체크리슀트 ν•­λͺ©μ„ μžλ™ μ™„λ£Œ μ²˜λ¦¬ν•˜κ³ , μ™„λ£Œ λΉ„μœ¨μ— 따라 κ³Όμ—… μ§„ν–‰λ₯ μ„ μž¬κ³„μ‚°

감정 트리거 감지: 3일 이상 μ§„ν–‰λ₯  0%인 과업이 있으면 AIκ°€ μžλ™μœΌλ‘œ κ°μ§€ν•˜μ—¬ νŒ€μ›μ—κ²Œ λΆ€λ“œλŸ¬μš΄ 격렀와 ꡬ체적인 μ‹œμž‘ κ°€μ΄λ“œλ₯Ό 제곡

μ‹œμž‘ν•˜κΈ°

사전 μš”κ΅¬μ‚¬ν•­

  • Node.js 18+
  • npm

μ„€μΉ˜ 및 μ‹€ν–‰

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# ν™˜κ²½λ³€μˆ˜ μ„€μ •
cp .env.example .env.local

.env.local에 λ‹€μŒ ν™˜κ²½λ³€μˆ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€:

GEMINI_API_KEY=            # Google Gemini API ν‚€
NEXT_PUBLIC_SUPABASE_URL=  # Supabase ν”„λ‘œμ νŠΈ URL
NEXT_PUBLIC_SUPABASE_ANON_KEY=  # Supabase 읡λͺ… ν‚€
SUPABASE_SERVICE_ROLE_KEY= # Supabase μ„œλΉ„μŠ€ ν‚€
RESEND_API_KEY=            # Resend 이메일 API ν‚€
# 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

http://localhost:3000μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒ€μ›

νŒ€ νŒ€ν”Œλž˜λ‹› (Teamplanit) | λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ 아이디어톀

이름 μ—­ν• 
이승희 Backend
μ „λ―Όκ²½ Backend
κΉ€μ§€μ—° Frontend
κΉ€μ§€μœ  기획
μ‘°μš©ν˜„ λ””μžμΈ
μž„μƒν˜„ λ©˜ν† 

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages