8.5 KiB
Comic Tester Feedback — Implementation Status
ClickUp task: https://app.clickup.com/t/868hmbhq8
Branch: fix/comic-tester-feedback
Implemented
-
Chapter renumbering on delete — When a chapter is deleted, remaining chapters are re-compacted to sequential positions (0, 1, 2...) using a temp-offset technique to avoid primary key conflicts.
-
Page count per chapter in overview — The chapter list now shows "X pages" next to each chapter name.
-
Edit button on public comic page — Owners see an Edit button that links to
/comics/project/[id]. -
Delete button on public comic page — Owners can delete the entire comic project with a confirmation modal.
-
Tooltip on follow bell icon — The bell icon now has a tooltip explaining "Follow for new chapter notifications".
-
Bifold (side-by-side) reading mode — A toggle between scroll and pages mode. Pages mode shows 2 panels per spread with prev/next navigation, keyboard arrow support, and auto-advance between chapters. Fixed height with black/white background. Previous chapter lands on last page.
-
Comment count fix — Uses actual
thread.comments.lengthinstead of the unreliablecommentCountfield. Also checksthread.lockedto hide the comment input when locked. -
Comment notifications — Notifies comic owners when someone comments on their chapter, using the existing notification system (
new-comic-commenttype). -
Cover image cropping — Cover uploads in both
create.tsxandproject/[id]/index.tsxnow openImageCropModalwith 3:4 aspect ratio before uploading. -
Comment reactions —
getChapterThreadquery now includesreactionsin comment select, and<CommentReactions>component is rendered below each comment inChapterComments.tsx. -
Comic age rating badge — Public comic page shows a content rating badge (e.g. "PG-13", "R") next to the title when
nsfwLevel > 0, usinggetBrowsingLevelLabel(). -
Faster generated images polling — Reduced polling interval from 3000ms to 1500ms in the editor workspace.
-
Image import picker — New "Import" tab in the panel creation modal allows selecting images from generator history, uploading them to CF, and creating panels via bulk create.
-
Tip total display — Replaced
TipBuzzButtonwithInteractiveTipBuzzButtonshowing accumulated tip total (queried fromBuzzTiptable) with optimistic session-local updates viauseBuzzTippingStore. -
Chapter early access / paywall — Creators can set a Buzz price and timeframe when publishing a chapter. During early access, readers must pay to unlock. After the timeframe, the chapter becomes free. Uses
EntityAccesstable + DB trigger mirroring ModelVersion pattern. Panels are stripped server-side for locked chapters. Addedid(autoincrement unique),availability,earlyAccessConfig,earlyAccessEndsAtto ComicChapter schema. New mutations:purchaseChapterAccess,updateChapterEarlyAccess. Migration:20260304123827_comic_chapter_early_access. -
Publish modal with paywall config — Publishing a chapter now opens a modal with an optional "Enable Early Access Paywall" toggle, Buzz price input, and timeframe (days) input. A separate "Paywall" button next to "Publish" opens the same modal with EA pre-enabled.
-
Paywall indicators in editor — Paywalled chapters show a yellow lock icon and yellow status dot in the sidebar, with a "Paywalled · X Buzz" tooltip. The chapter header shows a yellow badge with the price.
-
Chapter settings modal — Replaced inline chapter name editing with a settings modal (gear icon). Contains: name input, EA config (for published chapters, can only reduce price/timeframe), and delete button with loading states.
-
Loading states for chapter operations — Add chapter button shows a spinner while creating. Delete shows a spinner on the sidebar item and modal button. Update shows a spinner on the sidebar item while saving.
-
Bulk upload image fix in reader — Panel images uploaded via bulk import were only showing as raw CF UUIDs in the reader. Fixed by wrapping all panel image URLs in
getEdgeUrl()in the reader'srenderPanelfunction. -
Moderation tools —
tosViolationfield on ComicProject. Moderator procedures:setTosViolation(toggles flag, notifies creator, hides from listings/search) andmoderatorUnpublishChapter(reverts to draft, notifies creator). TOS-violated projects are hidden fromgetPublicProjectsand blocked ingetPublicProjectForReaderfor non-owner/non-mod. Frontend: red TOS violation banner on overview, moderator dropdown menus on both overview (flag/unflag) and chapter reader (unpublish). Report button added to chapter reader header (reports at project level). -
Unpublish protection — Published chapters that have been purchased by someone via early access cannot be unpublished by the creator.
-
Multi-model support — Project-level model selection. Creators can choose between NanoBanana (default), Seedream v4.5, OpenAI GPT-Image, or Qwen in Project Settings. Each model has its own aspect ratio options. The config map (
COMIC_MODEL_CONFIG) stores engine, baseModel, versionId, and available sizes per model. Qwen uses a separateimg2imgVersionIdfor image-to-image generation. Flux2 was evaluated but excluded (only supports 4 images per request). -
Persistent panel images (CF upload) — Generated panel images are now uploaded to Cloudflare Images before creating the Image record. Previously, panels stored raw orchestrator URLs which expire within 30 days. Now uses
uploadViaUrl()to persist to CF, storing the CF image ID. Applies to all generation paths (create, enhance, bulk, smart create) via the single polling endpoint. -
NSFW level indicators — Panel cards show a colored NSFW badge (PG/PG-13/R/X/XXX) based on the image's
nsfwLevelfrom content moderation. Badges also appear on the chapter sidebar (next to page count) and project header (next to stat pills). Uses bitwise flag detection to find the highest set level. -
Circular dependency fix (media-schemas) — Fixed
ReferenceError: Cannot access 'imageValueSchema' before initializationcaused by circular imports in the data-graph generation system. Extracted Zod schemas (imageValueSchema,videoMetadataSchema,videoValueSchema) into a leaf modulemedia-schemas.tsthat has no circular dependencies, while keeping version IDs in their respective graph files. -
Pick from generator for cover/hero images — Both the create page and project settings modal now have a "Pick from generator" button below the cover and hero dropzones. Opens
ImageSelectModalwith generator history, fetches the selected image, uploads to CF, and sets it as the cover or hero. Uses the same pattern as the panel import picker.
Not Implemented — Feasibility Analysis
Requires significant new work (medium-high effort)
| Feedback | Effort | Details |
|---|---|---|
| Dedicated moderator comics queue | Medium | Report system works (ComicProjectReport exists, reports show in /moderator/reports). Core moderation tools (TOS flag, mod unpublish) are implemented. Missing: dedicated /moderator/comics.tsx page, text moderation (Clavata) integration, and report-action workflow linking. |
| Per-chapter reporting | Low-Medium | Currently reports are at the project level. Adding ReportEntity.ComicChapter requires DB model, report schema, and moderator queue integration. |
| Setting/art style reference | Unknown | AI generation feature — needs orchestration/model changes and UX for style reference input. |
| Feed panels from previous chapters | Unknown | AI generation feature — needs orchestration changes to accept reference panels as context. |
| Reference image tagging (e.g. "@character with item") | Unknown | AI generation feature — needs UX + prompt engineering for tagged references. |
| Comic images in user's posts/images | TBD | Architecture decision on how comic panels relate to user gallery. Panels already have imageId FK to Image table, so the data relationship exists. |
| PDF export | Medium | Needs PDF generation service + creator permission controls + optional Buzz-gated download. |
| Reactions on image panels | Intentionally skipped | Testers specifically warned against this: "johnny civ is 100% going to fill someone's Romance Tragedy last panel with laughing face reacts" |