Initial commit: habit tracker PWA with Google OAuth, push notifications

FastAPI + SQLAlchemy/Alembic + MariaDB backend with Jinja2/htmx/Alpine
server-rendered frontend. Multi-user via Google OAuth, daily habit
tracking, monthly/weekly history views, Web Push reminders via
APScheduler, and PWA support (manifest, service worker, offline caching).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 18:06:17 +09:00
co-authored by Claude Sonnet 5
commit cee589bb3e
80 changed files with 4695 additions and 0 deletions
@@ -0,0 +1,28 @@
<div class="field">
<label>시행 요일</label>
<div class="weekday-picker">
<template x-for="(day, idx) in days" :key="idx">
<button
type="button"
class="weekday-pill"
:class="{ selected: (mask & (1 << idx)) !== 0 }"
@click="if (mask !== (1 << idx)) mask = mask ^ (1 << idx)"
x-text="day"
></button>
</template>
<button
type="button"
class="everyday-btn"
:class="{ selected: mask === 127 }"
@click="mask = 127"
>매일</button>
</div>
</div>
<div class="field">
<label style="display:flex; align-items:center; gap:8px;">
<input type="checkbox" x-model="alarmOn" style="width:auto;" />
알람 사용
</label>
<input x-show="alarmOn" x-cloak type="time" name="reminder_time" value="{{ reminder_value|default('') }}" style="margin-top:6px;" />
</div>