Bekind Labs · Hackathon

Timesheet

A weekly hours tracker for Bekind Labs consultants — log once, route to the right approver, invoice without reconciling by hand.

Bekind Labsのコンサルタント向け週次勤怠ツール — 記録し、適切な承認者へ振り分け、手作業の照合なしで請求へ
Bekind Labs 컨설턴트를 위한 주간 근무시간 도구 — 기록하고, 올바른 승인자에게 전달하고, 수작업 대조 없이 청구까지
Log Submit Approve Invoice
記録 → 提出 → 承認 → 請求 ・ 기록 → 제출 → 승인 → 청구
The product

One tool for the whole loop

ループ全体をひとつのツールで ・ 루프 전체를 하나의 도구로

Dual approval — manager confirms non-billable, lead confirms billable — feeding monthly invoicing. Today: PTO tool + spreadsheet + manual export.

Maya · Consultant

Rebuilds every entry, every Friday.

毎週金曜、一から入力し直す
매주 금요일, 처음부터 다시 입력
Carlos · Manager

Manually checks a separate PTO tool.

別のPTOツールと手作業で照合
별도 PTO 도구와 수동으로 대조
Andrew · Lead

Exports to his own burn-vs-SOW sheet.

独自のスプレッドシートに書き出す
자체 스프레드시트로 내보내기
Nadia · Ops

Manually reconciles hours before invoicing.

請求前に時間を手作業で照合
청구 전 시간을 수동으로 대조
Who this is for

Four personas, one loop

4つのペルソナ、ひとつのループ ・ 4개의 페르소나, 하나의 루프
M

Maya

Consultant

Log my hours, get back to work.

時間を記録して、すぐ仕事に戻りたい
시간만 기록하고 바로 업무로
C

Carlos

Manager · non-billable

Just confirm nothing's off before it locks.

ロックの前に、問題ないか確認するだけ
잠기기 전에 이상 없는지 확인만
A

Andrew

Project lead · billable

Everyone's hours in — and right — before the client sees it.

クライアントに出す前に、全員分を正しく
고객에게 가기 전, 모두의 시간을 정확히
N

Nadia

Ops / billing admin

Before invoicing, I need everyone at 40 hours.

請求前に、全員40時間を確認したい
청구 전, 전원 40시간 확인 필요
Where the idea came from

D&F recap

D&Fの振り返り ・ D&F 요약
0
"Build a
timesheet"
1
Whose
problem?
4
Personas
M·C·A·N
2
Wireframes
(low-fi)
3
Claude design
mockups
wireframes.html · 6 low-fi screens
  • Instinct: reason from capability — "I can build this" — and start there.
    つい「作れる」から始めがち
    보통 "만들 수 있다"에서 시작하기 쉽다
  • D&F shift: whose problem, exactly — and what do they need — before a screen exists.
    D&Fで「誰の課題か」へ発想が変わる
    D&F는 "누구의 문제인가"로 관점을 바꾼다
  • These low-fi screens (left) went into Claude design on Yoo-san's design system — that's the login screen and demo you'll see shortly.
    この低精度画面をClaude designでモックアップ化
    이 저해상도 화면을 Claude design으로 목업화
  • Mockup value-add: confidence on what matters, not just polish.
    見た目より「何が大事か」の確信
    겉모습보다 "무엇이 중요한가"의 확신
How we actually built it

The flow, in numbers

数字で見るフロー ・ 숫자로 보는 플로우
0
Stories
トラッカー合計 ・ 전체 스토리
0
Features
機能 ・ 기능
0
Bugs
バグ ・ 버그
0
Chores
雑務 ・ chore
0
Design
デザイン ・ 디자인
D&F → now, real commit timestamps D&F開始→現在(実コミット)・ D&F 시작→현재(실제 커밋)
Two tracks, one repo — not just an org chart 2つのトラック、1つのリポジトリ ・ 두 트랙, 하나의 저장소
09:59:18dev-alicefix: show week and per-category hours on manager approval queue rows (#200029569)
09:59:23dev-bobfeat: map calendar events to timesheet entries, persisted and additive (#200029568)
10:14:14dev-bobfix: renumber calendar event mappings migration to 0019 — collision resolved
2つのトラックが5秒差でmainにマージ。15分後、マイグレーション番号の衝突を解消
두 트랙이 5초 차이로 main에 병합. 15분 후 마이그레이션 번호 충돌 해결
Where we are now

Live on production

本番環境で稼働中 ・ 프로덕션에서 실행 중
R114 / 15 Accepted
R1-13 · Ops viewUnstarted — last hop
R22 / 13 Accepted
Right nowMapping calendar events → entries

What we have

  • Login, roles, Ops setup
  • Log billable + non-billable hours
  • Submit → routes to manager + lead
  • Manager approve / reject
  • Lead approve-all
  • Approval queues show week + hours (both sides)
  • Fill remaining with project
  • Autosave
  • Google Calendar view
  • Slack logging (AI-parsed)
timesheet-hackathon.pages.dev
Where we want to take it

What's next

これからの予定 ・ 앞으로의 계획
Prefill from last week先週から自動入力 ・ 지난주에서 자동 채움
Multi-project rows + routing複数プロジェクト行と振り分け ・ 다중 프로젝트 행과 라우팅
Manager / lead rostersマネージャー・リード名簿 ・ 매니저・리드 명단
Bulk approve一括承認 ・ 일괄 승인
"100% submitted & approved" signal「100%提出・承認済み」表示 ・ "100% 제출・승인" 표시
Everyone-at-40h view全員40時間ビュー ・ 전원 40시간 보기
Slack-based logging, refinedSlack記録の改善 ・ Slack 기록 개선
Burn vs SOW for leadsリード向けバーン対SOW ・ 리드용 번-대-SOW
Utilisation reporting for OpsOps向け稼働率レポート ・ Ops용 가동률 리포트
The loop already works end to end — what's left is making it fast and trustworthy at the edges people live in every day.
ループは既に一通り動く。あとは日常の細部を速く、信頼できるものにするだけ ・ 루프는 이미 처음부터 끝까지 동작한다. 남은 건 일상 속 세부를 빠르고 믿을 수 있게 만드는 것
Reflection

Three hats, three trade-offs

3つの帽子、3つのトレードオフ ・ 세 개의 모자, 세 가지 트레이드오프
Rigor slip

The hours looked saved, but weren't

保存されたように見えて、実は違った ・ 저장된 것처럼 보였지만 아니었다
  • Shipped, accepted, looked done — click Save, entry sits there.
    出荷・承認済みに見えた ・ 배포・승인되어 완료된 것처럼 보였다
  • Reality: hours didn't always persist — reload could lose them.
    実際は保存が不安定だった ・ 실제로는 저장이 불안정했다
  • AC never tested "come back later and check."
    「後で確認」のシナリオが無かった ・ "나중에 확인" 시나리오가 없었다
AC as written
Enter hours → total updates. No "still there later" scenario.
Follow-up story
"Show Maya her saved hours" — closed the gap after the fact.
  • Same shape, still open: billable-only week can't submit.
    同じ形の未解決バグが残る ・ 같은 형태의 미해결 버그가 남아있다
Rigor slip

The confirm step became a formality

確認ステップが形だけになった ・ 확인 단계가 형식적으로만 남았다
  • e2e scope: dev/Claude proposes, PM confirms — the second pair of eyes.
    提案は開発、確認はPMの役目 ・ 제안은 개발, 확인은 PM의 역할
  • Same person in both roles → the check still runs, but stops catching anything.
    同一人物だと確認が形だけになる ・ 같은 사람이면 확인이 형식만 남는다
  • Ops-before-visibility call: engineering-sound, but cost calendar time.
    技術的には妥当だが時間を要した ・ 기술적으로는 타당했지만 시간이 들었다
  • Three hats didn't just add work — it removed the built-in cross-check.
    3役兼任が相互チェックを消した ・ 세 역할을 겸하며 상호 점검이 사라졌다
Conscious trade-off, not a slip

One shared Supabase instance

共有のSupabaseインスタンス ・ 공유된 Supabase 인스턴스
  • No easy branch-per-dev database — both tracks shared one instance.
    開発者ごとのDB分離は困難だった ・ 개발자별 DB 분리는 어려웠다
  • Real collision: migration numbers clashed, fixed by hand.
    マイグレーション番号が衝突 ・ 마이그레이션 번호가 충돌
  • Still costing us: Bob's e2e flaky — RLS vanishes after a local db reset.
    RLSがリセット後に消える不具合が継続 ・ 리셋 후 RLS가 사라지는 문제 지속
Red-discipline held
Flagged unresolved, not claimed green.
Cost of the trade
Isolating envs upfront risked losing day one to infra.
← → navigate · N notes
Speaker notes