Plan: Transitioning to Forward Deployed Engineer / AI Engineer
一份分阶段路线图,供后端工程师转向 FDE 与 AI Engineer 角色——解读头衔混乱、应用型 LLM 技术栈与面试循环。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 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 のメールアドレスに変換) |
| 「今月のポイント」 | 今月増えたポイント(取り消しを含み、交換での消費は含めない) |