Jamorham
Nightscout용 xDrip+ 버전
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기매일 하나의 주제로 나를 돌아보고, AI와 함께 생각을 정리하는 개인 기록 서비스
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AI 상담 서비스가 아니라 스스로 기록하고 돌아보는 경험에 집중한 자기성찰 기록 서비스입니다. 매일 써야 한다는 부담 없이, 마음이 향할 때 나에게 맞는 깊이의 질문 3개를 받고, 그중 하나에 답을 쓰면 AI가 글을 요약하고 감정 키워드와 짧은 메시지를 남겨줍니다. • 파스텔 레트로 데스크탑(Windows) 감성의 UI — 모든 화면을 .EXE 스타일의 창 프레임으로 구성 • 질문의 깊이를 Lv.1(가볍게) ~ Lv.4(아주 깊게)로 나누고, 색(하늘색 → 라벤더 → 핑크 → 진보라)으로 표현README 전문 보기 ↗
정답을 찾기보다, 지금의 나를 알아가는 시간
🔗 서비스 바로가기: dear-mind-phi.vercel.app
체험 계정: 아이디
demo/ 비밀번호dearmind1234Google 계정 없이 로그인 화면의 아이디 로그인으로 바로 둘러볼 수 있어요. 샘플 기록이 미리 들어 있고, 여러 사람이 함께 쓰는 계정이라 쓴 글은 다른 방문자에게도 보여요.
dear-mind는 AI 상담 서비스가 아니라, AI와 함께하는 자기성찰 기록 서비스입니다. 매일 써야 한다는 부담 없이 마음이 향할 때 들어와서, 나에게 맞는 깊이의 질문 3개를 받습니다. 그중 하나에 답을 쓰면 AI가 글 밑에 깔린 마음을 짧게 짚어 주고, 감정 키워드와 한마디를 남겨 줍니다.
이 서비스의 핵심은 AI가 사용자 대신 생각하는 게 아니라, 사용자가 스스로 생각할 수 있도록 좋은 질문을 던지고 그 생각을 다시 바라보게 돕는 것입니다.
| 문제 | 해결 |
|---|---|
| 무엇을 써야 할지 모르겠다 | 나이대와 원하는 깊이에 맞춘 질문 3개를 받고, 그중 하나를 골라 답한다 |
| 쓰는 일이 부담스럽다 | 매일 쓰라고 재촉하지 않는다. 글자 수 제한도 없다 |
| AI가 대신 답을 정해 버린다 | AI는 진단이나 조언 대신 글에 드러난 마음을 비춰 주기만 한다 |
| 기록이 딱딱하게 느껴진다 | 파스텔 레트로 데스크탑 감성의 포근한 UI로 기록 자체를 편안하게 만든다 |
핵심 타깃: 생각이 많고, 자신의 감정과 가치관, 일상을 글로 정리해 보고 싶은 사람
사용 상황: 잠들기 전, 퇴근 후, 혼자 있는 시간, 중요한 결정을 앞둔 때
사용자 니즈: 무엇을 쓸지 알려 주기 · 부담 없이 기록하기 · 내 생각을 다시 바라보기
AI 상담이 아닌, AI와 함께하는 자기성찰 기록 서비스
AI는 진단, 치료, 상담을 하지 않습니다. 감정을 점수로 매기지 않고, 글에 드러난 표현을 있는 그대로 비춰 주는 역할만 맡습니다.
| 로그인 | 온보딩 (기본 레벨) | 홈 |
|---|---|---|
| 오늘의 질문 | 글쓰기 | AI 분석 |
| 기록 보기 (목록) | 기록 보기 (캘린더) | 다크 모드 |
| 위기 표현 감지 | 다른 질문 받기 한도 | 기록이 없을 때 |
|---|---|---|
| AI 분석 대신 전문기관 연락처가 담긴 고정 안내 문구 | 하루 2회를 다 쓰면 버튼이 안내 문구로 바뀌고, 받은 세트는 넘겨 보기 | 빈 화면 대신 첫 기록을 쓰러 가는 버튼 |
| 로그인 실패 | 없는 페이지 | 오류 화면 |
| 틀린 비밀번호는 안내 문구를 띄우고 아이디는 남겨 둠 | 없는 주소나 다른 사람의 기록은 NOT-FOUND.EXE 창으로 | 예상하지 못한 오류는 ERROR.EXE 창에서 다시 시도하거나 홈으로 |
flowchart LR
A[Google 로그인<br/>또는 체험 계정] --> B{온보딩 완료?}
B -- 아니오 --> C[나이대 선택] --> D[기본 레벨 선택] --> E
B -- 예 --> E[홈]
E --> F[오늘의 질문 3개] --> G[글쓰기] --> H[AI 분석] --> E
E --> I[기록 보기<br/>목록 / 캘린더] --> J[기록 상세]
E --> K[내 정보 변경]
| 화면 | 경로 | 설명 |
|---|---|---|
| 로그인 | / | Google OAuth 로그인 + 체험 계정용 아이디 로그인 |
| 온보딩 | /onboarding/age, /onboarding/level | 나이대와 기본 레벨 설정 |
| 홈 | /home | 폴더 모양 메뉴 3개 (작성하기 / 기록 보기 / 내 정보 변경) |
| 오늘의 질문 | /write | 질문 3개 중 하나 선택, 다른 질문 받기, 레벨 변경 제안 |
| 글쓰기 | /write/[id] | 선택한 질문이 위에 고정된 집중형 에디터 |
| AI 분석 | /write/analysis/[journalId] | 요약 · 감정 키워드 · 한마디 |
| 기록 | /records, /records/[id] | 목록 / 캘린더 보기, 상세에서 글과 AI 분석 다시 보기 |
| 내 정보 변경 | /settings | 나이대 · 기본 레벨 재설정, 로그아웃 |
생각의 무게감에 따라 질문을 4단계로 나눴습니다. 온보딩에서 평소 즐기는 깊이를 기본 레벨로 고릅니다.
| 레벨 | 이름 | 성격 | 색 |
|---|---|---|---|
| Lv.1 | 가볍게 | 오늘 있었던 일을 가볍게 떠올려 봐요 | 하늘색 |
| Lv.2 | 조금 더 | 요즘 드는 생각을 조금 더 들여다봐요 | 라벤더 |
| Lv.3 | 깊게 | 마음 한 켠의 감정을 깊게 마주해요 | 핑크 |
| Lv.4 | 아주 깊게 | 나 자신에 대해 아주 깊이 성찰해요 | 진보라 |
Lv.1~2는 그날의 상황을 떠올리는 질문, Lv.3~4는 가치관이나 삶의 방향을 묻는 보편적인 질문이 자연스러워서, 이 기준을 질문 생성 프롬프트에 반영했습니다.
◀ ○ ○ ● ▶로 넘겨 보며 어느 질문에든 답할 수 있습니다.사용자가 설정한 레벨을 시스템이 임의로 바꾸지 않고, 선택 기록을 근거로 제안만 합니다.
요즘 더 깊은 질문을 자주 고르셨네요. 기본 레벨을 한 단계 올려 Lv.3으로 바꿀까요?
[바꾸기][지금이 좋아요]
글을 저장하면 Claude가 Structured Output으로 아래 형태의 결과를 돌려주고, 글과 1:1로 저장됩니다.
{
"summary": "잘하고 싶은 마음이 커서 오히려 조급해졌던 것 같아요",
"tone_keywords": ["조급함", "다짐", "기대"],
"message": "천천히 생각을 정리해 가는 것만으로도 의미 있는 시간이에요"
}
crisis 필드?view=calendar&month=&date=)에 남겨서, 상세 화면을 닫고 돌아와도 그대로 유지됩니다.기획 단계의 키워드는 따뜻함 · 포근함 · 밤 · 기록 · 편지였습니다. 이를 옛 Windows 데스크탑 감성으로 풀었습니다.
.EXE 스타일 창 프레임(타이틀바 + 창 조작 버튼 3개)으로 구성
날짜.TXT, 온보딩은 설치 프로그램처럼 SETUP.EXE (1/2)저장하고 분석 보기)[무엇]을 [하지] 못했어요. 잠시 후 다시 시도해 주세요 형태로 통일합니다.| 구분 | 사용 기술 |
|---|---|
| Frontend | Next.js 16 (App Router), React 19, TypeScript |
| Styling | Tailwind CSS v4, lucide-react, Google Fonts (Jua) |
| Backend | Next.js Server Components / Server Actions, Proxy (구 Middleware) |
| DB / Auth | Supabase (PostgreSQL, Row Level Security, Google OAuth, 이메일·비밀번호 인증) |
| AI | Claude Sonnet 5.5 (@anthropic-ai/sdk) + Structured Output (Zod) |
| Deploy | Vercel + Supabase |
flowchart LR
U[브라우저] -->|요청| P[Proxy<br/>세션 갱신 · 접근 제어]
P --> S[Next.js<br/>Server Components<br/>Server Actions]
S -->|조회 · 저장| DB[(Supabase<br/>PostgreSQL + RLS)]
S -->|질문 생성 · 글 분석| AI[Claude API<br/>Structured Output]
U -->|Google OAuth| AUTH[Supabase Auth]
AUTH --> DB
erDiagram
AUTH_USERS ||--|| PROFILES : "1:1"
AUTH_USERS ||--o{ QUESTIONS : "1:N"
AUTH_USERS ||--o{ JOURNALS : "1:N"
QUESTIONS |o--o{ JOURNALS : "question_id"
JOURNALS ||--o| AI_ANALYSES : "1:1"
PROFILES {
uuid id PK
text age_group
smallint base_level
text nickname
timestamptz level_counted_since
}
QUESTIONS {
uuid id PK
uuid user_id FK
text content
smallint level
date question_date
smallint batch
smallint position
}
JOURNALS {
uuid id PK
uuid user_id FK
uuid question_id FK
text question_content
smallint level
text content
}
AI_ANALYSES {
uuid journal_id PK
text summary
text_array tone_keywords
text message
boolean is_safety_fallback
}
level_counted_since 이후의 글만 레벨 변경 제안에 사용합니다.(user_id, question_date, batch, position) unique 인덱스로, 동시에 요청이 들어와도 한 세트만 저장됩니다.question_content)을 함께 저장합니다.app/
├─ page.tsx # 로그인
├─ auth/callback/ # OAuth 콜백 (온보딩 여부에 따라 분기)
├─ onboarding/ # 나이대 · 레벨 선택
├─ home/ # 폴더형 메뉴, 미니 고양이
├─ write/ # 오늘의 질문 · 글쓰기 · AI 분석
├─ records/ # 기록 목록 · 캘린더 · 상세
├─ settings/ # 내 정보 변경
├─ components/ # WindowFrame, FolderMenuItem, ThemeToggle 등 공통 UI
└─ lib/
├─ actions.ts # Server Actions (저장 · 분석 · 새로고침 · 아이디 로그인)
├─ auth.ts # 로그인 직후 이동할 경로 (온보딩 여부)
├─ demoAccount.ts # 체험 계정 아이디 · 비밀번호
├─ db.ts # 조회 함수
├─ dailyQuestions.ts # 오늘의 질문 세트 생성 · 조회
├─ levelSuggestion.ts # 레벨 변경 제안 조건
├─ llm.ts # Claude 호출 (Structured Output, 1회 재시도, 폴백)
├─ questions.ts # 질문 생성 (LLM + 질문 은행 폴백)
├─ analysis.ts # 글 분석 · 위기 표현 필터
├─ emotions.ts # 감정 키워드 단어 목록
├─ theme.ts # 라이트 / 다크 테마
└─ supabase/ # 서버 · 브라우저용 Supabase 클라이언트
proxy.ts # 세션 갱신, 비로그인 사용자 접근 제어
supabase/migrations/ # DB 스키마 · RLS 정책
scripts/seed-demo.mjs # 체험 계정 생성 · 샘플 기록으로 초기화
프로젝트 루트에 .env 파일을 만들고 아래 값을 채웁니다.
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
ANTHROPIC_API_KEY=
# 체험 계정 스크립트에만 필요 (서버 전용 키, 절대 공개하지 않음)
SUPABASE_SECRET_KEY=
Supabase 프로젝트에 supabase/migrations/의 SQL을 순서대로 적용하고, Authentication에서 Google 로그인과 Email 로그인을 켭니다.
npm install
npm run dev
npm run seed:demo
체험 계정을 만들고 샘플 기록 10개를 넣습니다. 이미 있으면 비밀번호와 프로필을 되돌리고 기록을 샘플로 다시 채워서, 방문자가 남긴 글을 정리할 때도 같은 명령을 씁니다.
http://localhost:3000에서 확인할 수 있습니다.