Jacal은 일정, 할일, 습관 추적, 팀 협업, 생산성 분석을 하나로 통합한 올인원 생산성 플랫폼입니다.
- 🗣️ 자연어 입력: 한 줄로 일정/할일 자동 분류 및 생성
- 🤖 AI 파싱: OpenAI/Ollama를 활용한 스마트 자연어 처리
- 📅 캘린더 뷰: 월간/주간 캘린더 보기 지원
- ✅ 할일 관리: 우선순위, 예상 소요 시간, 상태 관리
- 🎯 습관 추적: 일일/주간 습관 관리 및 완료 기록
- 👥 팀 협업: 팀별 공유 일정 및 댓글 기능
- ⚡ 집중 타이머: 포모도로 타이머로 집중력 향상
- 📊 생산성 분석: 일일 생산성 추적 및 시각화
- 🔐 보안 인증: JWT 기반 안전한 인증 시스템
- 🌐 다국어 지원: 한국어/영어 지원 (i18next)
- ⌨️ 키보드 단축키: 마우스 없이 빠른 작업 (Ctrl+K 등)
- 📧 이메일 통합: POP3를 통한 이메일 자동 파싱
- 🔗 웹훅 시스템: 외부 시스템 연동
- 🛠️ 관리자 패널: 전체 시스템 관리 및 모니터링
- Runtime: Node.js + Express + TypeScript
- Database: PostgreSQL + Prisma ORM
- AI/NLP: OpenAI API, Ollama (선택적)
- Authentication: JWT + bcrypt
- Email: POP3 (node-pop3), Nodemailer
- Schedule: node-cron
- Validation: Zod
- Calendar: Google Calendar API
- Framework: React 19 + TypeScript + Vite
- State: TanStack Query (React Query)
- HTTP Client: Axios
- i18n: i18next, react-i18next
- Charts: Recharts
- Styling: Modern CSS (CSS Variables)
- Container: Docker Compose
- Database: PostgreSQL 15 Alpine
- Node.js v18 이상
- Docker & Docker Compose (권장)
- OpenAI API Key (선택적 - Ollama 사용 가능)
- 레포지토리 클론
git clone <repo-url>
cd jacal- PostgreSQL 실행
docker-compose up -d- 의존성 설치
npm install- 환경 변수 설정
apps/api/.env 파일 생성:
PORT=3000
DATABASE_URL="postgresql://jacal:jacal123@localhost:5432/jacal?schema=public"
JWT_SECRET=your-super-secret-key-change-in-production
OPENAI_API_KEY=your-openai-api-key-here # 선택적- 데이터베이스 마이그레이션
cd apps/api
npx prisma migrate dev
npx prisma generate- 관리자 계정 생성 (선택적)
npm run create-admin- 백엔드 서버 실행
npm run dev- 프론트엔드 실행 (새 터미널)
cd apps/web
npm run dev- 브라우저에서 접속
- Frontend: http://localhost:5173
- Backend API: http://localhost:3000
위 과정에서 2번 대신 로컬 PostgreSQL을 사용하고, DATABASE_URL을 적절히 수정하세요.
한 줄의 자연어 입력으로 이벤트나 할일을 자동 생성합니다.
예시:
- "내일 오후 3시 팀 미팅 2시간"
- "다음 주 금요일까지 보고서 작성"
- "매일 아침 9시 운동하기"
엔드포인트: POST /api/nlu/parse
- 월간 보기: 월 전체의 일정 한눈에 파악
- 주간 보기: 시간대별 상세 일정 확인
- 관리자 모드: 전체 사용자의 일정 조회 가능
- 일일/주간 습관 생성 및 관리
- 완료 기록 및 달성률 확인
- 색상/아이콘으로 시각적 구분
API:
GET /api/habits- 습관 목록POST /api/habits- 습관 생성POST /api/habits/:id/log- 완료 기록GET /api/habits/:id/stats- 통계 조회
- 팀 생성 및 멤버 관리 (Owner/Admin/Member 역할)
- 공유 이벤트 생성 및 댓글
- 팀원 간 일정 조율
API:
GET /api/teams- 팀 목록POST /api/teams- 팀 생성POST /api/teams/:id/events- 공유 이벤트 생성POST /api/teams/events/:id/comments- 댓글 작성
- 일일 집중 시간 추적
- 완료한 할일 통계
- 미팅 시간 분석
- 생산성 점수 계산
API:
GET /api/analytics/dashboard- 대시보드 데이터GET /api/analytics/productivity- 생산성 추이
관리자 사용자는 다음 기능에 접근 가능:
- 시스템 통계: 사용자/이벤트/할일 집계
- 사용자 관리: 전체 사용자 조회/수정/삭제, POP3 설정
- 콘텐츠 관리: 전체 할일/이벤트/습관/팀 관리
- 데이터베이스: 통계 및 백업 관리
- 설정: 사이트 이름, URL, 언어, 가입 허용 등
- 웹훅 관리: 웹훅 CRUD
- 통합 관리: 외부 서비스 연동
- 이메일 설정: SMTP 설정
각 사용자는 개인 설정 가능:
- Ollama 설정: OpenAI 대신 로컬 LLM 사용
- POP3 설정: 이메일 자동 파싱 (제목/본문에서 할일 생성)
- 웹훅 설정: 개인 웹훅 URL 및 컬럼 매핑
Ctrl+K: 명령 팔레트 (빠른 작업)N: 새 이벤트T: 새 할일D: 대시보드C: 캘린더H: 습관 추적M: 팀 뷰S: 설정?: 단축키 도움말
POST /api/auth/register- 회원가입POST /api/auth/login- 로그인GET /api/auth/me- 현재 사용자 정보
GET /api/tasks- 할일 목록POST /api/tasks- 할일 생성PUT /api/tasks/:id- 할일 수정DELETE /api/tasks/:id- 할일 삭제
GET /api/events- 이벤트 목록GET /api/events/all- 전체 이벤트 (관리자)POST /api/events- 이벤트 생성PUT /api/events/:id- 이벤트 수정DELETE /api/events/:id- 이벤트 삭제
GET /api/habits- 습관 목록POST /api/habits- 습관 생성PUT /api/habits/:id- 습관 수정DELETE /api/habits/:id- 습관 삭제POST /api/habits/:id/log- 완료 기록GET /api/habits/:id/stats- 통계
GET /api/teams- 내 팀 목록POST /api/teams- 팀 생성PUT /api/teams/:id- 팀 수정DELETE /api/teams/:id- 팀 삭제POST /api/teams/:id/members- 멤버 추가DELETE /api/teams/:id/members/:userId- 멤버 제거GET /api/teams/:id/events- 공유 이벤트 목록POST /api/teams/:id/events- 공유 이벤트 생성POST /api/teams/events/:id/comments- 댓글 작성
GET /api/analytics/dashboard- 대시보드GET /api/analytics/productivity- 생산성 추이
GET /api/settings- 내 설정PUT /api/settings- 설정 업데이트
GET /api/calendar- 캘린더 이벤트
POST /api/focus/session- 집중 세션 기록
POST /api/nlu/parse- 자연어 파싱 및 자동 생성
GET /api/admin/stats- 시스템 통계GET /api/admin/users- 사용자 목록PUT /api/admin/users/:id- 사용자 수정DELETE /api/admin/users/:id- 사용자 삭제PUT /api/admin/users/:id/settings- 사용자 설정 수정GET /api/admin/content/tasks- 전체 할일GET /api/admin/content/habits- 전체 습관GET /api/admin/content/teams- 전체 팀DELETE /api/admin/content/:type/:id- 콘텐츠 삭제GET /api/admin/database/stats- 데이터베이스 통계POST /api/admin/database/backup- 백업 생성GET /api/admin/database/backups- 백업 목록GET /api/admin/settings- 앱 설정PUT /api/admin/settings- 앱 설정 업데이트GET /api/admin/webhooks- 웹훅 목록POST /api/admin/webhooks- 웹훅 생성PUT /api/admin/webhooks/:id- 웹훅 수정DELETE /api/admin/webhooks/:id- 웹훅 삭제GET /api/admin/integrations- 통합 목록PUT /api/admin/integrations/:name- 통합 업데이트GET /api/admin/email- 이메일 설정PUT /api/admin/email- 이메일 설정 업데이트
jacal/
├── apps/
│ ├── api/ # 백엔드
│ │ ├── src/
│ │ │ ├── routes/ # API 라우트
│ │ │ │ ├── admin/ # 관리자 라우트
│ │ │ │ ├── auth.ts # 인증
│ │ │ │ ├── tasks.ts # 할일
│ │ │ │ ├── events.ts # 이벤트
│ │ │ │ ├── habits.ts # 습관
│ │ │ │ ├── teams.ts # 팀
│ │ │ │ ├── analytics.ts # 분석
│ │ │ │ ├── settings.ts # 설정
│ │ │ │ ├── calendar.ts # 캘린더
│ │ │ │ ├── focus.ts # 집중 타이머
│ │ │ │ └── nlu.ts # 자연어 처리
│ │ │ ├── services/ # 비즈니스 로직
│ │ │ │ ├── nlu.service.ts # NLU 서비스
│ │ │ │ ├── webhook.service.ts # 웹훅 서비스
│ │ │ │ └── email.service.ts # 이메일 서비스
│ │ │ ├── middleware/ # 미들웨어
│ │ │ │ ├── auth.ts # 인증 미들웨어
│ │ │ │ └── admin.ts # 관리자 미들웨어
│ │ │ ├── lib/ # 유틸리티
│ │ │ └── index.ts # 엔트리 포인트
│ │ ├── prisma/
│ │ │ └── schema.prisma # 데이터베이스 스키마
│ │ ├── scripts/
│ │ │ └── create-admin.ts # 관리자 생성 스크립트
│ │ └── package.json
│ └── web/ # 프론트엔드
│ ├── src/
│ │ ├── components/ # React 컴포넌트
│ │ │ ├── admin/ # 관리자 컴포넌트
│ │ │ ├── settings/ # 설정 컴포넌트
│ │ │ ├── Dashboard.tsx # 대시보드
│ │ │ ├── Calendar.tsx # 캘린더
│ │ │ ├── HabitTracker.tsx # 습관 추적
│ │ │ ├── TeamView.tsx # 팀 뷰
│ │ │ └── ...
│ │ ├── lib/ # API 클라이언트
│ │ │ ├── api.ts # 기본 API
│ │ │ ├── habitApi.ts # 습관 API
│ │ │ ├── teamApi.ts # 팀 API
│ │ │ ├── analyticsApi.ts # 분석 API
│ │ │ └── adminApi.ts # 관리자 API
│ │ ├── i18n/ # 다국어
│ │ │ ├── i18n.ts # i18next 설정
│ │ │ ├── ko.json # 한국어
│ │ │ └── en.json # 영어
│ │ ├── App.tsx # 메인 컴포넌트
│ │ ├── index.css # 글로벌 스타일
│ │ └── main.tsx # 엔트리 포인트
│ └── package.json
├── docker-compose.yml # Docker 설정
├── package.json # 루트 패키지
└── README.md
주요 모델:
- User: 사용자 (인증, 권한)
- Task: 할일
- Event: 이벤트
- Habit: 습관
- HabitLog: 습관 완료 기록
- Team: 팀
- TeamMember: 팀 멤버
- SharedEvent: 공유 이벤트
- Comment: 댓글
- Tag: 태그
- Analytics: 생산성 분석 데이터
- UserSettings: 사용자 설정 (Ollama, POP3)
- WebhookConfig: 웹훅 설정
- ConnectedAccount: 외부 계정 연동 (Google Calendar 등)
- RecurringRule: 반복 규칙
- Reminder: 알림
- ProcessedEmail: 처리된 이메일 기록
- AppSettings: 앱 전역 설정
- Webhook: 관리자 웹훅
- Integration: 통합 설정
- EmailSettings: 이메일 설정
- BackupRecord: 백업 기록
# 백엔드 개발 서버 (hot reload)
cd apps/api
npm run dev
# 프론트엔드 개발 서버 (hot reload)
cd apps/web
npm run dev# 백엔드 빌드
cd apps/api
npm run build
npm start
# 프론트엔드 빌드
cd apps/web
npm run build
npm run preview# 마이그레이션 생성
npx prisma migrate dev --name migration_name
# Prisma 클라이언트 재생성
npx prisma generate
# Prisma Studio (GUI)
npx prisma studio
# 관리자 계정 생성
npm run create-admin# 서버 설정
PORT=3000
NODE_ENV=development
# 데이터베이스
DATABASE_URL="postgresql://jacal:jacal123@localhost:5432/jacal?schema=public"
# JWT 인증
JWT_SECRET=your-super-secret-key-change-in-production
# OpenAI (선택적)
OPENAI_API_KEY=sk-...
# Google Calendar (선택적)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URI=http://localhost:3000/api/auth/google/callback
# SMTP (선택적 - 이메일 발송용)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password- 프로젝트 초기 설정
- PostgreSQL + Prisma 설정
- JWT 인증 및 권한 관리
- 할일 CRUD
- 이벤트 CRUD
- 자연어 처리 (OpenAI/Ollama)
- 리액트 UI 구현
- 습관 추적 시스템
- 팀 협업 기능
- 캘린더 뷰 (월간/주간)
- 생산성 분석 대시보드
- 집중 타이머
- 관리자 패널 (전체 관리)
- 다국어 지원 (i18n)
- 키보드 단축키
- POP3 이메일 통합
- 웹훅 시스템
- 사용자 설정
- Docker Compose 설정
- 태그 시스템
- 반복 일정 지원
- 댓글 기능
- Google Calendar 양방향 동기화
- Outlook Calendar 연동
- CalDAV 지원
- 푸시 알림 (웹/모바일)
- 이메일 알림
- SMS 알림
- 스마트 스케줄링 알고리즘
- AI 기반 시간 추천
- 모바일 앱 (React Native)
- 파일 첨부 기능
- 팀 캘린더 통합 뷰
- 비디오 회의 통합 (Zoom, Meet)
- 고급 분석 및 리포트
- 공유 링크 생성
- 이메일 초대 시스템
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
MIT License
프로젝트 관련 문의사항이 있으시면 이슈를 생성해주세요.