Solo Full-Stack · 2025.12 — Present

PlanDo!

지도 위에서 할 일을 관리하고, AI가 자연어로 태스크를 생성하고, 팀원을 직접 모집할 수 있는 협업 앱

앱 체험하기 → GitHub
5+
핵심 기능
PWA
모바일 최적화
GPT-4o-mini
AI 생성
Solo
기획·개발·배포
Screenshots
화면 미리보기
대시보드
대시보드
지도 뷰
지도 뷰
AI 태스크
AI 태스크
칸반 보드
칸반 보드
캘린더
캘린더
mobile-6.png
팀 모집
대시보드
대시보드
지도 뷰
지도 뷰
desktop-3.png
칸반 보드
desktop-4.png
AI 태스크
desktop-5.png
팀 모집
User Story
이런 상황을 해결합니다

팀 구성부터 일정 관리, 실제 만남까지 협업의 전 과정을 하나의 앱에서

01 — Recruit
팀 모집
위치 기반으로 근처 팀원을 구해요
02 — Space
워크스페이스
팀 구성 즉시 공유 공간이 만들어져요
03 — AI
AI 태스크
한 줄 입력으로 태스크가 완성돼요
04 — Notify
위치 알림
장소 근처 가면 자동으로 알림이 와요
Features
주요 기능

단순한 할 일 앱보다 실제 협업 흐름을 담았어요

Core
위치 기반 태스크 관리

지도 위에 태스크를 핀으로 등록하고, 해당 장소 반경(200~500m) 진입 시 자동으로 푸시 알림을 받아요. 카카오 지도 API와 Web Push를 결합한 PlanDo!만의 핵심 기능이에요.

AI
AI 태스크 생성 · 조회

자연어로 태스크를 생성하면 AI가 날짜, 우선순위, 참여자를 자동 파악해요. 조회, 수정, 삭제도 말하듯이 할 수 있어요.

GPT-4o-mini자연어 처리
Team
팀 모집 플랫폼

사이드 프로젝트·스터디 팀원을 모집하고 지도에서 근처 모집글을 찾아요. 역할별 인원 설정, 신청자 관리까지 한번에.

위치 기반 검색팀 모집
Task
멀티 뷰 태스크 관리

리스트, 칸반, 캘린더, 지도 4가지 뷰. 드래그앤드롭, 체크리스트, 반복 일정, 템플릿을 지원해요.

칸반 보드반복 일정
Message
실시간 팀 메시지

1:1 및 그룹 채팅, 파일 공유, @멘션, 함께하는 할 일 확인까지 워크스페이스 맥락이 담겨 있어요.

WebSocket파일 공유
Theme
커스텀 테마

7가지 기본 테마와 기준 색상·배경을 직접 고르는 커스텀 테마. iOS 네이티브 컬러 피커 연동.

7가지 테마커스텀 컬러
Tech Stack
기술 스택

기획부터 배포까지 혼자 선택하고 구현했어요

Frontend
React
MUI
PWA
Capacitor
Backend
Spring Boot
Spring Security
JWT
WebSocket
DB & Infra
PostgreSQL
AWS Lightsail
Web Push (VAPID)
API & AI
GPT-4o-mini
Kakao Maps
Kakao OAuth
Dev Experience
개발하며 해결한 문제들

설계 결정과 트레이드오프를 직접 경험했어요

Problem

AI에게 "내일", "다음주 금요일" 같은 자연어 날짜를 넘기면 백엔드에서 모든 경우의 수를 직접 파싱해야 했어요. 경우의 수가 무한해서 유지보수가 불가능한 구조였어요.

Solution

시스템 프롬프트에 오늘 날짜와 자주 쓰는 기준 날짜를 미리 계산해서 주입하고, LLM이 모든 날짜를 ISO 8601 형식으로 변환해 응답하도록 설계를 바꿨어요. 백엔드는 날짜 판단 없이 CRUD만 담당해요.

Problem

PWA 환경에서 백그라운드 위치 추적 권한이 iOS Safari에서 제한적이었어요. 앱이 닫혀 있어도 위치 알림을 보내야 했어요.

Solution

앱 활성 시점에 주기적으로 위치를 체크하고, 서버에서 반경 계산 후 Web Push(VAPID)로 푸시를 보내는 하이브리드 방식을 채택했어요. 배터리와 정확도 사이의 균형점을 찾았어요.

Problem

AI 응답이 예상과 다른 JSON을 반환하거나, 사용자가 프롬프트 인젝션 입력을 할 수 있는 보안 취약점이 있었어요.

Solution

허용된 액션 타입을 백엔드 화이트리스트로 검증하고, 사용자 권한 범위를 서버에서 재확인해요. 시스템 프롬프트에 인젝션 방어 지시를 명시했어요.