Plan: Transitioning to Forward Deployed Engineer / AI Engineer
백엔드 엔지니어가 FDE·AI 엔지니어로 전환하기 위한 단계별 로드맵
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗勉強時間や成果をポイント(1pt=1円)に換算し、本人と親が成長を見える化する Web アプリです。 ポイントは本人がいつでも交換を請求でき、親が「渡した✅」を付けた時点で交換完了になり、ポイントが消費されます。 Z会の教材ごとのチェックリスト(学年×教科×月)もあり、チェックするとポイントがもらえます。
仕様書: https://claude.ai/artifact/6gpy8NfGy9TgzVhytTUrqn (v0.1)
supabase/migrations/ の SQL を番号順に実行する(手順は下の「データベースの更新手順」)
0001_init.sql:初期スキーマ0002_v1_1_changes.sql:v1.1 の変更(既存データも引き継ぐ)0003_zkai_and_exchange.sql:Z会チェックリストと、交換の「渡した」で完了する変更0004_zkai_items.sql:親が Z会の教材(6教科以外の行)を追加できるようにする変更0005_performance.sql:表示の高速化(残高の集計ビュー、インデックス、権限チェックの軽量化).env.example を .env.local にコピーして値を入れる
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY(サーバー側のみで使用)npm install
npm run dev # http://localhost:3000
npm test # ポイント計算ルールのテスト
npm run lint # 型チェック
Vercel では同じ環境変数を Project Settings > Environment Variables に設定します。
SUPABASE_TIMING=1 を付けると、Supabase への通信ごとの時間がサーバーのログ(Vercel の Logs)に出る
(例:[supabase] 132ms GET /rest/v1/users)。確認が終わったら外すSQL ファイルは「どこかに置く」ものではなく、中身をコピーして Supabase の SQL Editor に貼り付けて実行します。
supabase/check_schema.sql の中身を全部コピーして貼り付け、Run を押す0001〜0005 のファイルがそれぞれ「実行済み」か「未実行」かを見るcheck_schema.sql を実行し、すべて「実行済み」になっていることを確かめる注意
0001_init.sql は最初の1回だけ実行する。もう一度実行すると「already exists」のエラーになる(データは壊れない)0002 以降は何度実行しても大丈夫。途中で失敗しても何も変更されないので、エラーを直してからもう一度実行すればよい0001_init.sql はもう実行済み。次の番号のファイルに進む0001_init.sql を実行する/signup で家族を登録する(初期科目:国語・数学・英語・理科・社会)can_view_child など)で家族ごとに分離し、
書き込みは Server Action で権限を確認してから service role で行う。
authenticated ロールには書き込みポリシーがないため、子どもが自分でポイントを付与することはできない。point_ledger の合計で求め、直接書き換えない。合計は集計ビュー point_balances で DB 側で計算する。(child_id, kind, ref_id) の一意制約で
同じボーナスの二重付与を防ぐ。@holiday-jp/holiday_jp。src/lib/points.ts の純粋関数にまとめ、src/lib/points.test.ts でテストしている。proxy.ts はセッションの有無の確認と期限切れのリフレッシュだけを行う(通常は通信しない)。
ユーザーの確認(JWT の検証)と役割の取得は lib/auth.ts で、React の cache() により1回のリクエストで1回だけ行う。UserClient 型)しか受け取らず、RLS を通らない管理用クライアントは渡せない。| 項目 | この実装での扱い |
|---|---|
| 連続記録ボーナス | 連続日数が設定日数の倍数(7日、14日…)に達するたびに付与 |
| 記録の削除・却下 | 親は手入力の記録を「却下」、タイマーの記録を「削除」できる(どちらも理由必須・本人に通知)。取り消すのはその記録のポイントのみで、付与済みの連続・週ボーナスは残す |
| 記録の編集 | 本人が時間・教材・科目・ページ・メモを編集できる(日付は不可)。時間を変えたら保存時のレートで再計算し、差分を「記録の修正」として台帳に残す。タイマー記録の時間を変えると手入力扱いになり、親が却下できる。教材の進捗は戻さない |
| ポイント交換 | 親の承認はなし。請求で親に通知。親が「渡した」を付けた時点で完了・消費し、本人に通知。「渡した」前なら本人が請求を取り消せる。以前「渡した」だけ付いていた交換は 0003 の実行時に完了にする |
| タスクの名前 | 任意。空なら「教材名 p.○-○」→ 教材名 → 科目名の順で表示。名前・教材・科目のどれか1つは必要 |
| テスト目標 | 目標と達成ポイントを子どもが目標ごとに決める(0〜1,000,000pt)。1つの目標につき達成は1回。点数目標は「○点以上」、英検などは合格/不合格で判定。未達成の目標は本人・親が取り下げ可 |
| Z会の学年 | 親が子どもごとに中学1〜3年を設定し、毎年3月(Z会の新年度)に自動で1つ上がる。表は学年に関係なく1〜3年のどれでも見られ、どのマスもいつでもチェックできる。学年が未設定のときは、選んだ学年を今年度の学年として記録する |
| Z会のチェック | 子どもが付け外しする。どの学年・どの月のマスもいつでもチェックできる(先の月も可)。付けたときのポイントを記録し、外したとき・親が取り消したときはその額を戻す(kind='zkai')。親が取り消したマスにはそのことを表示するが、子どもはもう一度チェックできる(記録の却下と同じく、新しい行になる) |
| Z会の教材の追加 | 親が子どもごとに、6教科以外の行(例:プラス 数学)を名前と1回分のポイント(50pt単位)で追加できる。表では6教科のあとに並び、チェック・ポイント・取り消しは教科と同じ。表から外しても、付け済みのチェックとポイントは残る。今月の進み具合とホームの「あと○教科」にも含める |
| Z会のポイント設定 | 教科ごとに親が50pt単位で設定(初期値 300pt、作文 500pt)。変更はこれから付けるチェックから反映 |
| ワーク1周 | 最終ページ到達で1周ボーナスを付与。2周目は本人が「○周目を始める」で開始 |
| 1周ボーナスの額 | 教材ごとに親が子どもの詳細画面で設定(初期値 2,000pt) |
| 今日のタスク | 完了の取り消しはなし。前日以前の未完了タスクはホームで「持ち越す/やめる」を選ぶ |
| 子どものログイン | 親が発行するログインID+パスワード(内部的には CHILD_EMAIL_DOMAIN のメールアドレスに変換) |
| 「今月のポイント」 | 今月増えたポイント(取り消しを含み、交換での消費は含めない) |