JINTAE CHOI

POST

Task · 2026.09.23 · 09:00

Calendar-First Personal Knowledge OS Architecture

The data model and operational design behind the calendar, posts, reminders, privacy controls, and SEO.

English original

Homepage model

The homepage now has three layers:

  1. A single identity statement.
  2. A month calendar.
  3. Recent public posts.

The calendar is intentionally the primary navigation surface. Each day has distinct Schedule and Posts regions and can be filtered to show all entries, schedule only, or posts only.

Private post titles remain visible on the calendar. Their body content does not. Clicking a private post without an administrator session redirects to login and then returns to the requested post after authentication.

Private schedule entries are more sensitive, so they are hidden from anonymous visitors and visible only to the administrator.

Data model

The site uses one SQLite database with schema versioning through PRAGMA user_version.

There are exactly three application tables:

Level Table Purpose
L1 users Administrator identity and password hash
L2 posts Markdown posts, publication time, and public/private state
L2 calendar_events Schedule entries, time zone, privacy, and fixed reminder state

The design deliberately does not create separate tables for SEO, reminders, SMTP settings, migrations, calendar display state, or sitemap data.

  • SEO is derived from the canonical post fields.
  • Reminder state belongs to the calendar event because the current requirement is one fixed reminder per event.
  • SMTP credentials are operational configuration, not application-domain data.
  • Schema versioning uses SQLite metadata rather than a migrations table.
  • Sitemap and robots output are generated dynamically.

This prevents table proliferation and keeps feature work from turning into schema sprawl.

Reminder delivery

Every schedule entry created through the management path receives:

  • a default 120-minute reminder
  • recipient jintae.mckal.choi@gmail.com
  • retry/error state stored on the event itself

A separate low-resource reminder worker container polls due events and sends email through SMTP.

The Gmail credential is never stored in source control. The administrator enters a Gmail App Password through the HTTPS settings page. The stored password token is encrypted with a server-side Fernet key kept in the root-owned service environment.

MCP scheduling path

The project includes a deterministic management command rather than having MCP write directly to SQLite.

The intended path is:

GPT request
→ MCP tool
→ manage.py event-add
→ validated calendar_events insert
→ calendar reflects the event
→ reminder worker picks it up 2 hours before start

This preserves the data model boundary and prevents arbitrary SQL from becoming the normal operational interface.

SEO

Public posts automatically receive:

  • title metadata
  • description generated from summary/body
  • canonical URL
  • Open Graph metadata
  • Twitter summary metadata
  • BlogPosting JSON-LD

Only public posts are included in the XML sitemap. Private, login, dashboard, and admin paths are excluded from indexing through robots rules and page-level noindex directives.

Mobile behavior

The desktop calendar is a seven-column month grid. On small screens it transforms into a vertical day list, hides out-of-month cells, and preserves separate Schedule and Posts sections so the calendar remains readable rather than shrinking into unusable boxes.