Skip to content

Add Slides to homepage and documentation site#277

Merged
hackerwins merged 10 commits into
mainfrom
homepage-slides-suite
May 22, 2026
Merged

Add Slides to homepage and documentation site#277
hackerwins merged 10 commits into
mainfrom
homepage-slides-suite

Conversation

@hackerwins

@hackerwins hackerwins commented May 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

Reframe the public surface from a 2-product narrative ("Word Processor & Spreadsheet") to a 3-product office-suite narrative now that Slides is
shipped alongside Sheets and Docs.

Homepage (packages/frontend/src/app/home/):

  • Hero: The Office Suite / You Can Own (forced two-line H1) + sub
    copy "Sheets, Docs, and Slides. Real-time collaboration, REST API,
    fully self-hosted."
  • DemoSection: third live Slides tab (Sheets → Docs → Slides, default
    Sheets), lazy-mounted, theme-synced via existing postMessage
    pattern. Token defaults to a public demo deck; override via
    VITE_DEMO_SLIDES_SHARED_TOKEN.
  • FeaturesSection: 6 secondary cards in a product-balanced 3×2 grid
    (Sheets 2, Docs 2, Slides 2). "Sharing & Permissions" dropped to
    remove overlap with the Real-Time Collaboration hero card.
  • UseCasesSection: card 2 replaced with a Slides pitch-deck case.
  • WhySection: comparison row updated to "Sheets, Docs & Slides in one
    app".
  • Footer: brand copy now reads "presentations, word processor, and
    spreadsheet".
  • Version label: hero eyebrow and demo footer now read from
    __APP_VERSION__, injected at vite build time from the root
    package.json so the strings can't drift from the shipped version
    again.

Documentation site (packages/documentation/):

  • New slides/ group with three pages: build-a-deck,
    themes-and-layouts, keyboard-shortcuts.
  • Nav + sidebar position Slides between Docs and Developers.
  • docs-editor/writing-a-document.md gains Tables and Pagination
    sections so the new "Tables & Pagination" feature card lands on
    real content.

Design docs: docs/design/homepage.md and docs/design/docs-site.md
brought back in sync with the shipped state.

Plan: docs/tasks/active/20260521-slides-homepage-docs-todo.md
documents the brainstormed decisions chunk-by-chunk.

Slides REST API/CLI, additional Slides docs pages (shapes / connectors
/ presentation-mode deep dives), and live Sheets-cell embedding inside
slides are intentionally out of scope.

Test plan

  • pnpm verify:fast (frontend + backend + sheets + docs + slides + documentation)
  • pnpm --filter @wafflebase/documentation build — no broken links to new pages
  • pnpm --filter @wafflebase/frontend build — no missing imports
  • Manual smoke (pnpm dev at localhost:5173):
    • Hero copy and version label correct
    • All three demo tabs render; Slides lazy-mounts on first activation; no reloads on switch
    • Theme toggle propagates to all three iframes via postMessage
    • 6 feature cards render in 3×2 grid; all hrefs resolve
    • UseCase 2 reads as Slides pitch-deck case
    • WhySection row reads "Sheets, Docs & Slides in one app"
    • Footer brand copy includes "presentations, word processor, and spreadsheet"
  • Manual smoke (docs site at localhost:5174):
    • Top nav order: Guide / Sheets / Docs / Slides / Developers
    • Slides sidebar group shows three pages, all render
    • writing-a-document#tables resolves and ToC lists Tables + Pagination
  • Self code review (5-agent parallel pass); blocking findings applied in 433c9e92

Demo iframe shows "Link unavailable" in local dev for all three tabs
since the demo tokens are production-bound — production at
wafflebase.io serves the real shared decks.

Summary by CodeRabbit

  • New Features

    • Added Slides module demo to the homepage with live presentation tab alongside Sheets and Docs
    • Introduced Slides documentation with guides on building decks, themes, layouts, and keyboard shortcuts
  • Documentation

    • Expanded documentation site structure to include Slides tutorials and developer references
    • Reorganized content around module-specific user guides (Sheets, Docs, Slides)
  • UI/UX Updates

    • Redesigned homepage messaging to position Wafflebase as a complete office suite
    • Updated feature cards and comparison table to highlight all three product modules
    • Enhanced demo with theme synchronization across all live iframes

Review Change Stack

hackerwins added 10 commits May 22, 2026 07:50
Slides is the third shipped module alongside Sheets and Docs, but the
homepage Hero and FeaturesSection still frame the product as
"Word Processor & Spreadsheet" and the docs site has no Slides
section. This task doc captures the brainstormed plan for a
3-product office-suite reframe: new Hero copy, a third live Slides
tab in DemoSection (Sheets/Docs/Slides, default Sheets), a 6-card
product-balanced FeaturesSection, a Slides pitch-deck UseCase, an
updated comparison row and Footer brand copy, plus three new
documentation pages (Build a Deck, Themes & Layouts, Keyboard
Shortcuts).

Slides REST API/CLI, additional docs pages, and live Sheets-cell
embedding inside slides are explicitly out of scope.
The homepage demo card has only shown Sheets and Docs since v0.3.
Slides is now the third shipped module, so the demo needs a live
preview tab to back up the new 3-product Hero copy.

Mirrors the Docs lazy-mount + theme-postMessage pattern: the Slides
iframe mounts on first tab activation and stays mounted across
switches; theme changes propagate without reload. Default active
tab stays Sheets so the most-polished demo loads first.

Token default is the brainstormed demo presentation; override via
VITE_DEMO_SLIDES_SHARED_TOKEN.
Hero H1 and Footer brand copy said "Word Processor & Spreadsheet"
— accurate when only Sheets and Docs shipped, but misleading now
that Slides is the third released module. Replace the product
enumeration with a single suite phrase ("The Office Suite") and
move the module list into the sub copy / footer paragraph.

H1 max-width relaxes from 16ch to 20ch since the new title is
shorter and lets the italic emphasis sit on its own line at most
breakpoints.
The secondary feature grid had 4 cards — 2 Sheets-specific, 1
Docs-specific, 1 cross-cutting (Sharing & Permissions) — and 0
for Slides. With Slides now a first-class module, the imbalance
made the lineup feel Sheets-heavy and silently omitted the new
product.

Replace with 6 cards in a product-balanced 2/2/2 layout (Sheets:
Formulas + Charts; Docs: Page-Based Editor + Tables & Pagination;
Slides: Themes & Layouts + Presentation Mode). The grid markup
stays md:grid-cols-2, so 6 cards render as 3 rows of 2 without
layout changes.

"Sharing & Permissions" overlapped the Real-Time Collaboration
hero card directly above, so dropping it removes a duplicate
without losing coverage.
UseCasesSection card 2 was a near-duplicate of card 1 (both
Sheets-only customer-data scenarios), so the page told the
"Slides shipped" story in Hero and Demo but went silent on
real-world Slides use in the use-cases section. Replace card 2
with a pitch-deck case that highlights themes/layouts/self-host
— deliberately staying away from live Sheets-cell embedding,
which isn't implemented yet.

WhySection's "Sheets & Docs in one app" comparison row reads as
"missing Slides" once Slides is part of the suite story; relabel
to "Slides, Docs & Sheets in one app". Google Workspace still
gets a checkmark in that column — they also ship all three.
The docs site has shipped guides for Sheets and Docs since v0.3 but
silently omitted Slides — every "What's Next" link in homepage cards
pointing at /docs/slides/* used to 404. Add the missing surface so
the homepage's Slides links resolve and new users have a first-day
reference.

Three pages mirror the existing Sheets/Docs structure:

- Build a Deck — end-to-end tutorial, counterpart to Build a Budget
- Themes & Layouts — theme + 11 layouts + placeholders reference
- Keyboard Shortcuts — catalog grouped by category

Nav and sidebar position the Slides group between Docs and
Developers so the order reads as a coherent product progression
(Guide, Sheets, Docs, Slides, Developers).

Shapes / connectors / presentation-mode deep dives are intentionally
deferred — they'll land in follow-up PRs as the surface area
stabilizes.
The homepage and docs-site design docs went stale after the 3-product
suite refresh — they still described "Word Processor & Spreadsheet"
copy, two demo tabs, four secondary cards, and a sheets-and-docs-only
documentation tree.

Bring both docs back in sync with the shipped code so they're
authoritative again: new Hero phrasing, three demo tabs with the
Slides token / lazy-mount story, the 3×2 product-balanced features
grid, the Slides pitch-deck UseCase, the updated WhySection row, and
the Slides documentation group in the VitePress nav and sidebar.
The hero eyebrow read "v0.3" and the demo footer read
"[email protected]" — both hardcoded strings that drifted apart from
the actual package version (now 0.4.1) and would silently rot at
every release. The Slides reframe forced an audit, so fix the
root cause: read the root package.json version at vite config time
and inject it as a build-time constant.

`__APP_VERSION__` is declared in vite-env.d.ts so TypeScript sees
it. The hero displays the marketing-style minor tag ("v0.4") by
slicing off the patch; the demo footer keeps the full
developer-style stamp ("[email protected]"). Bumping the root
package.json is now the single touch point at release time.
Browser-driven wrapping at large viewports kept "The Office Suite
You Can Own" on a single line at most desktop widths, which buried
the italic emphasis. The intended display is two stacked phrases
where the syrup-deep italic "You Can Own" lands directly below the
white "The Office Suite" — that's how the design reads as a
declarative statement instead of a long compound noun.

Switch to `block` spans on each half. The em keeps its italic +
syrup-deep styling. `max-w-[20ch]` drops since the forced line
break makes it redundant.
Three findings from the self code-review pass.

The Slides demo footer tip said "press F to present" — but Slides
has no F-key handler, only ⌘/Ctrl+Enter (current) and
⌘/Ctrl+Shift+Enter (first), as documented in this same PR's
keyboard-shortcuts page. F would only trigger browser fullscreen,
not the Slides player. Update the tip to match the real shortcut.

The WhySection comparison row read "Slides, Docs & Sheets in one
app" while every other place on the page used "Sheets, Docs, and
Slides". Align the row to the same ordering for consistency.

The "Tables & Pagination" feature card linked to writing-a-document
— the same href as the "Page-Based Document Editor" card — and the
target page covered neither tables nor pagination. Add Tables and
Pagination sections to writing-a-document.md and anchor the Tables
card to #tables so each card lands on relevant content.
@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR reframes the Wafflebase product narrative from a 2-product office suite (Sheets/Docs) to a 3-product suite (Sheets/Docs/Slides) across the homepage, documentation site, and marketing copy, while introducing dynamic version injection infrastructure to replace hardcoded version strings in the UI.

Changes

3-Product Homepage and Documentation Site Redesign

Layer / File(s) Summary
App version constant injection
packages/frontend/vite.config.ts, packages/frontend/src/vite-env.d.ts
Vite configuration reads root package.json at build-time and injects the package version as __APP_VERSION__ global constant via define, enabling dynamic version display in marketing copy instead of hardcoded strings.
Hero section and branding messaging refresh
packages/frontend/src/app/home/hero-section.tsx, packages/frontend/src/app/home/footer.tsx, packages/frontend/src/app/home/use-cases-section.tsx, packages/frontend/src/app/home/why-section.tsx
Hero H1 updated to "The Office Suite You Can Own" with new subtitle mentioning Sheets/Docs/Slides and fully self-hosted; version in eyebrow changes from hardcoded v0.3 to dynamic VERSION_LABEL computed from __APP_VERSION__; footer brand copy updates to mention presentations, word processor, and spreadsheet; use-case replaces "Customer dashboards" scenario with "Pitch decks & all-hands"; comparison table label updates to "Sheets, Docs & Slides in one app".
Features section card redesign
packages/frontend/src/app/home/features-section.tsx
Secondary features grid expands from two cards to six product-balanced cards (two per module) covering page-based document editor, tables & pagination, themes & layouts, and presentation mode; lucide-react icon imports updated to include new card icons and remove previously used sharing icon.
Demo section with Slides iframe tab
packages/frontend/src/app/home/demo-section.tsx
Homepage demo extends from two tabs (Sheets/Docs) to three tabs (Sheets/Docs/Slides presentation); new Slides tab uses lazy iframe mounting (activated on tab click), locks URL at first render, and integrates with existing theme synchronization via postMessage to all three iframes; footer tip copy updated to include Slides guidance; app version display changes from hardcoded string to __APP_VERSION__ variable; new SlidesIcon SVG component added for Slides tab.
Slides module documentation pages
packages/documentation/slides/build-a-deck.md, packages/documentation/slides/themes-and-layouts.md, packages/documentation/slides/keyboard-shortcuts.md, packages/documentation/docs-editor/writing-a-document.md
Three new Slides guides added: "Build a Deck" (step-by-step deck creation/presentation), "Themes & Layouts" (theme/layout concepts and controls), and "Keyboard Shortcuts" (Mac/Windows/Linux reference). Docs editor guide replaces "Page Layout" section with "Tables" and expanded "Pagination" documentation covering table operations and page-break behavior.
VitePress navigation and sidebar for Slides section
packages/documentation/.vitepress/config.ts
Slides link added to top-level navigation between Docs and Developers; new Slides sidebar group created with three routed pages (Build a Deck, Themes & Layouts, Keyboard Shortcuts).
Design documentation and task tracking
docs/design/homepage.md, docs/design/docs-site.md, docs/tasks/README.md, docs/tasks/active/20260521-slides-homepage-docs-todo.md
Design documents updated to describe 3-product narrative, three-tab demo with Slides iframe lazy-mounting and theme sync, six-card features grid, and VitePress Slides section structure; task index updated with new active task entry; comprehensive task checklist added describing implementation steps for demo iframe, hero/footer copy, features grid, use-cases/why sections, Slides documentation pages, VitePress configuration, design doc updates, verification, and PR process.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • wafflebase/wafflebase#179: Extends earlier Butter & Maple demo setup by adding the third Slides tab with theme postMessage and lazy iframe mounting to homepage demo section.
  • wafflebase/wafflebase#75: Earlier documentation navigation refactor and "Docs editor" content that this PR builds on by further extending VitePress sidebar structure and updating docs-editor guide pages.
  • wafflebase/wafflebase#116: Updates docs/tasks/README.md to manage task index entries similar to how this PR updates active/archived task tracking.

Poem

🐰 Hops across the office suite with glee,
Three products strong: Sheets, Docs, Slides to see!
Lazy iframes dance, themes sync in time,
From bunny-versioned builds, a feature sublime!
Six cards shimmer in grids of three,
The Office Suite You Can Own—now it's spree! 🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely summarizes the primary change: adding Slides to the homepage and documentation site, reflecting the core objective of expanding from a two-product to three-product suite.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch homepage-slides-suite

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/frontend/src/app/home/footer.tsx`:
- Around line 62-64: In the Footer component update the product list text to
match the site-wide ordering (Sheets, Docs, Slides); replace the existing phrase
"presentations, word processor, and spreadsheet" in the JSX string inside Footer
with the consistent ordering (e.g., "spreadsheet, word processor, and
presentations" or the branded "Sheets, Docs, and Slides") so the footer aligns
with the hero, comparison table, and features sections.

In `@packages/frontend/vite.config.ts`:
- Around line 10-16: Wrap the readFileSync + JSON.parse that produces rootPkg in
a try-catch to surface a clear, actionable error when package.json is missing,
unreadable, or contains invalid JSON: catch filesystem and parse errors around
the JSON.parse(readFileSync(...)) expression (referencing readFileSync,
JSON.parse, path.resolve and rootPkg) and rethrow or log a message that includes
the resolved path and the original error message so the build error indicates
whether the file was not found, unreadable, or malformed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f7a65e25-17e0-46e3-a7f1-a55b1b9100f4

📥 Commits

Reviewing files that changed from the base of the PR and between 4c98155 and 471c136.

📒 Files selected for processing (17)
  • docs/design/docs-site.md
  • docs/design/homepage.md
  • docs/tasks/README.md
  • docs/tasks/active/20260521-slides-homepage-docs-todo.md
  • packages/documentation/.vitepress/config.ts
  • packages/documentation/docs-editor/writing-a-document.md
  • packages/documentation/slides/build-a-deck.md
  • packages/documentation/slides/keyboard-shortcuts.md
  • packages/documentation/slides/themes-and-layouts.md
  • packages/frontend/src/app/home/demo-section.tsx
  • packages/frontend/src/app/home/features-section.tsx
  • packages/frontend/src/app/home/footer.tsx
  • packages/frontend/src/app/home/hero-section.tsx
  • packages/frontend/src/app/home/use-cases-section.tsx
  • packages/frontend/src/app/home/why-section.tsx
  • packages/frontend/src/vite-env.d.ts
  • packages/frontend/vite.config.ts

Comment on lines +62 to +64
Self-hosted collaborative presentations, word processor, and
spreadsheet, with real-time editing and a REST API for
automation.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Product order inconsistent with the rest of the homepage.

The footer lists "presentations, word processor, and spreadsheet" (Slides → Docs → Sheets), but the hero, comparison table, and features section all use "Sheets, Docs, and Slides" ordering. Consider harmonizing to maintain a consistent product narrative.

Proposed fix
-              Self-hosted collaborative presentations, word processor, and
-              spreadsheet, with real-time editing and a REST API for
-              automation.
+              Self-hosted collaborative spreadsheet, word processor, and
+              presentations, with real-time editing and a REST API for
+              automation.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Self-hosted collaborative presentations, word processor, and
spreadsheet, with real-time editing and a REST API for
automation.
Self-hosted collaborative spreadsheet, word processor, and
presentations, with real-time editing and a REST API for
automation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/frontend/src/app/home/footer.tsx` around lines 62 - 64, In the
Footer component update the product list text to match the site-wide ordering
(Sheets, Docs, Slides); replace the existing phrase "presentations, word
processor, and spreadsheet" in the JSX string inside Footer with the consistent
ordering (e.g., "spreadsheet, word processor, and presentations" or the branded
"Sheets, Docs, and Slides") so the footer aligns with the hero, comparison
table, and features sections.

Comment on lines +10 to +16
// Root package.json is the single source of truth for the version
// surfaced on the homepage. Read at config-eval time and inject as a
// build-time constant so the hero eyebrow and demo footer always
// match the shipped package.
const rootPkg = JSON.parse(
readFileSync(path.resolve(__dirname, "../../package.json"), "utf-8"),
) as { version: string };

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add error handling for file I/O and JSON parsing.

If package.json is missing, relocated, or contains invalid JSON, the build will fail with an unclear error. Wrap the read and parse in a try-catch block to provide a more actionable message.

🛡️ Proposed fix
 // Root package.json is the single source of truth for the version
 // surfaced on the homepage. Read at config-eval time and inject as a
 // build-time constant so the hero eyebrow and demo footer always
 // match the shipped package.
+let rootPkg: { version: string };
+try {
-const rootPkg = JSON.parse(
-  readFileSync(path.resolve(__dirname, "../../package.json"), "utf-8"),
-) as { version: string };
+  rootPkg = JSON.parse(
+    readFileSync(path.resolve(__dirname, "../../package.json"), "utf-8"),
+  );
+  if (typeof rootPkg.version !== "string") {
+    throw new Error("package.json is missing a valid 'version' field");
+  }
+} catch (err) {
+  throw new Error(
+    `Failed to read root package.json for version injection: ${err instanceof Error ? err.message : String(err)}`
+  );
+}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Root package.json is the single source of truth for the version
// surfaced on the homepage. Read at config-eval time and inject as a
// build-time constant so the hero eyebrow and demo footer always
// match the shipped package.
const rootPkg = JSON.parse(
readFileSync(path.resolve(__dirname, "../../package.json"), "utf-8"),
) as { version: string };
// Root package.json is the single source of truth for the version
// surfaced on the homepage. Read at config-eval time and inject as a
// build-time constant so the hero eyebrow and demo footer always
// match the shipped package.
let rootPkg: { version: string };
try {
rootPkg = JSON.parse(
readFileSync(path.resolve(__dirname, "../../package.json"), "utf-8"),
);
if (typeof rootPkg.version !== "string") {
throw new Error("package.json is missing a valid 'version' field");
}
} catch (err) {
throw new Error(
`Failed to read root package.json for version injection: ${err instanceof Error ? err.message : String(err)}`
);
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/frontend/vite.config.ts` around lines 10 - 16, Wrap the readFileSync
+ JSON.parse that produces rootPkg in a try-catch to surface a clear, actionable
error when package.json is missing, unreadable, or contains invalid JSON: catch
filesystem and parse errors around the JSON.parse(readFileSync(...)) expression
(referencing readFileSync, JSON.parse, path.resolve and rootPkg) and rethrow or
log a message that includes the resolved path and the original error message so
the build error indicates whether the file was not found, unreadable, or
malformed.

@github-actions

github-actions Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

Verification: verify:self

Result: ✅ PASS in 211.7s

Lane Status Duration
sheets:build ✅ pass 12.7s
docs:build ✅ pass 12.4s
slides:build ✅ pass 13.7s
verify:fast ✅ pass 126.3s
frontend:build ✅ pass 18.9s
verify:frontend:chunks ✅ pass 0.3s
backend:build ✅ pass 4.8s
cli:build ✅ pass 2.1s
verify:entropy ✅ pass 20.4s

Verification: verify:integration

Result: ✅ PASS

@codecov

codecov Bot commented May 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@hackerwins
hackerwins merged commit 1ba8f33 into main May 22, 2026
4 checks passed
@hackerwins
hackerwins deleted the homepage-slides-suite branch May 22, 2026 23:22
hackerwins added a commit that referenced this pull request May 24, 2026
These tasks' features merged to main (PRs #267 #271 #277 #284 #285)
but their plan checkboxes were never ticked, so the todo files
lingered in tasks/active. Added a status note citing each merge
commit, marked the checkboxes complete, and ran tasks:archive to
move them under archive/2026/05 with regenerated indexes.

Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant