Video as a Fourth Content Type — §1.1 A Deliberate Departure from Simplicity
By owner decision, short video (20s) was added on top of voice/photo/text. Flagged as a deliberate departure from the spec's simplicity guardrail, extending the existing capture pattern as-is. Unresolved playback compatibility caveat noted.
AI 버전
Context: Tension with the spec
work.md §1.1 nailed content types down to just three — voice/photo/text, "when in doubt, leave it out." Video runs head-on against that guardrail (pendant = small and intimate → video pushes the grain toward a "video message app"). I flagged this tension explicitly, and the owner chose to add it → implemented in a restrained version (20s cap).
Honest record: this was not something the AI recommended, but a decision by the product owner to deliberately extend the spec. It is a trade-off against the §1.1 spirit of depth = accuracy.
Implementation (1f14c0e) — extending the existing pattern as-is
Mirrored the audio capture pattern to keep consistency:
components/VideoRecorder.tsx—getUserMedia({video,audio}), live preview, 20s cap, re-record, distinguishing permission-denied/failure, unmount-safe.lib/items.ts saveVideoItem+ MIME whitelist (isAllowedVideoMime, video/ prefix).- schema/init: added
'video'to thetypeCHECK + idempotent migration for existing DBs (ALTER TABLE … DROP/ADD CONSTRAINT) — becauseCREATE TABLE IF NOT EXISTSdoesn't change constraints on an existing table. - fourth tab on the add/contribute screen, ItemCard·SurfaceClient render, raised the upload early-block limit (
MAX_UPLOAD_BYTES45MB, video ≤40MB). - The media route's Range/206 already covers video seeking.
Verification (run directly)
- Confirmed the 'Video' tab shows up.
- Dummy video upload →
201(= confirms the DB CHECK migration actually allows 'video' on an existing DB, 0 constraint violations). - video item shown in the library, media
206/video/webm/nosniff. - Rejection:
text/htmlin the video slot →400.
⚠️ Unresolved caveat — playback compatibility
ffmpeg isn't on this machine, so no server transcoding. Desktop Chrome records webm → doesn't play on iPhone (and vice versa). On the same device/browser it works fine. This is the video counterpart of the §12 audio issue; audio was solved with mp4-first + server conversion, but video is unresolved. It can be solved by putting ffmpeg + webm→mp4 conversion on the production host (reusing the audio code lib/audio.ts pattern).
This caveat is predicted from code/format knowledge without testing real-device cross playback — actual iPhone↔desktop cross playback is unverified.
리뷰 필요
내 시각이 아직 안 들어간 entry.