Changelog
This is the record of what changed in Renown, newest first. While the project is in alpha it is organized by date rather than version number. Each day is summarized in plain language; the full detail lives in the commit history.
2026-10-07
- A changelog, and a documentation site to carry it
- The docs app builds on its own: name its files to the transformer
2026-10-05
- Words can be selected by dragging across a live text field in Firefox. Before, the press was taken as an attempt to drag the whole section, so only triple-click selection worked.
2026-10-02
- Text Columns joins the live blocks: click a paragraph in any column and type there, and Enter makes a new paragraph that flows into place. The block is retired from the picker but existing ones still render, and now edit like everything else.
- Paragraphs sharing a column now get the standard gap between them.
2026-10-01
Arc: live text editing completes.
Added
- Every block's text is now live on the canvas: click a heading, eyebrow, description, or the text inside a repeating item (a card title, a team member's name, a timeline entry) and type in place. Eight paragraph fields get the full rich editor, both on the canvas and in the Edit modal.
- Blocks can have more than one face. The canvas shows a Flip button in the hover controls of a block that does, starting with the image box, so the back of a flipped card is editable as live text. Which face is showing is never saved into the page and does not affect undo.
- Tap to select: tapping or clicking a block selects it and keeps its controls (Edit, Flip, arrows, remove) visible. Block controls were previously hover-only and unreachable on a tablet. Typing in a block's live text selects it too, and a tap outside deselects.
Fixed
- The exhibition banner now shows its heading, dates and venue; they had never rendered.
- Composables are imported explicitly throughout, so the project also works on a checkout whose folder path contains parentheses.
2026-09-30
Arc: the login page design.
Added
- The login page is now a page every site can design. Settings → Site has a Login page button that opens the block editor on a reserved
admin-loginpage, hidden from the Pages list and navigation. The sign-in form itself can never be removed: the page's Login Form block is only a placement marker, and if the marker is deleted the form still shows above the design. - Login and set-password pages have their own layout that loads only what they need, so the form arrives already themed, without the site's header, navigation or footer.
Fixed
- The way in is never behind the under-construction curtain. A device with no session could meet the curtain where the login form should have been, with no route to sign in. Arriving at login through the admin's own redirect no longer leaves the visitor stuck until a refresh.
2026-09-29
Added
- Block text becomes live on the canvas. A new text component makes labels (headings, eyebrows) editable in place as plain text, and body fields become rich fields stored as the same TipTap documents the page editor writes. Existing plain bodies read as paragraphs and nothing on disk changes until edited. Text, Page Header and Image Box were converted first as the reference pattern.
Fixed
- Blocks in a column grid have equal cell widths: the grid pays the site gutter once and blocks inside it give up their own, which was the missing 64 pixels in narrow cells.
- A block's edit controls appear when hovering anywhere on the block, not only its top strip.
2026-09-28
Arc: Sections.
Added
- Pages grow sections. Every block sits in a section that is invisible until you dress it: a painted full-width background, a columns choice that flows blocks into a responsive grid, and top and bottom divider edges in eight drawn shapes (waves, layered waves, curve, tilt, scallop, zigzag, mountains, drops) with color, depth, scale, flip and an optional slow drift that stills for reduced motion. Existing pages render exactly as before.
- Sections have their own gear on every block in the editor, opening a dedicated Section panel. The canvas now renders sections the same way visitors see them, including the real column grid.
- Sections author their own columns: each empty column has an Add tile that opens the full block catalog, and blocks in a section carry their own edit, remove and reorder controls. Old and new editor documents are both read, and published pages render every block in a multi-block section.
- Every icon field in the block editor shows the current icon beside a Browse button that opens a searchable grid of the whole icon catalog; typing the name still works. Icons now ship with the site instead of loading from a CDN.
- Every image field has a Remove button when there is an image to remove, including the post editor's photo.
- The Media page opens an image for editing: a large preview, its URL, and optional alt text, title and caption. Deleting checks the site's pages and posts first and, if the image is still in use, lists where instead of deleting.
Fixed
- Clearing a section setting actually clears it. The Section panel's Apply used to merge, which resurrected cleared columns and backgrounds.
- Every empty column shows an Add tile, and one trailing tile stays when the grid fills.
- Refreshing the Media page no longer crashes, and the media library fills the first time it opens.
2026-09-26
- The image box is faithful to its original design: the square card's hairline frame and faint shadow, the rounded card's eight-pixel corners and soft halo, the circular icon medallion anchored at the top of the text area (poking out of the card when there is no photo), the hover rise, and the flip's wind-up and settle.
2026-09-25
Added
- The hero block has a background option. Particles draws a canvas field of drifting dots linked by fading lines that lean toward the pointer. It follows the palette by default (with separate dot and line colors in the editor), stills under reduced motion, pauses offscreen, and downloads nothing for a plain hero. The field follows a finger across a whole touch gesture, including scrolls.
- A new Image Box block (a card with image, eyebrow, heading, body, icon and palette-aware colors) with an optional flip to a back face in four directions. It supports tap-to-flip, keyboard flipping, reduced motion, and crawler-visible content.
- A site's dashboard shows a warning banner while the site is under construction, linking to the settings that control it and the page editor that dresses it.
Changed
- The curtain page's editor goes back to Settings, not the Pages list that deliberately omits it.
2026-09-24
Arc: the under-construction curtain.
Added
- Any site can hide behind an under-construction page from Settings → Site. The curtain is a real page with the full block editor that exists only behind that settings card. Flipping the switch conjures it for private editing, and only Save raises the curtain. Signed-in members see the real site, and cached pages never carry real content.
- The signup endpoint refuses requests while the platform's own site is under construction.
- A Shop section in the admin sidebar with Products and a new Orders page: date, product, buyer, amount, an Unfulfilled filter, mark-fulfilled with an optional tracking number, and undo.
- The admin opens on a dashboard instead of a list: content counts per type, pages, members, an orders tile that flags what needs fulfilling, quick actions, and recent posts and orders. The posts list moves to
/admin/posts, with old?type=bookmarks redirected.
Changed
- Fleet domains link to the sites they name: the title opens a site's admin and each domain opens its public face in a new tab.
Fixed
- Orders could be read by any signed-in user on any site, customer emails included. The last read policy from before site scoping is dropped and the guarded endpoint is the only way in.
2026-09-23
Arc: the platform grows operator tools, and the spacing law arrives.
Added
- Custom domains from the Site tab: connect a domain, see per-domain status and the DNS records to paste at the registrar with copy buttons. A three-light status shows red until DNS is seen, orange while the SSL certificate issues, and green only once the domain actually answers over HTTPS. Each site takes one custom domain for now.
- A Platform page in the default site's admin lists every site with its plan, members and domains. Search runs in the database across name, slug, domain and member email, with pages of fifty and Load More. Deleting a site is a typed-confirmation, repeatable teardown that never touches the platform site and removes login accounts only when asked.
- A Usage tab on the Platform page shows free-tier standing: storage, auth users, this month's deployments and email sends against the free allowance, with bars that warn at 60% and error at 85% and always print the numbers. Meters that can't be read link to their dashboards. One vendor failure dims one meter, not the page.
- New signups are marked with a New badge in the Platform nav, in the fleet table, and in a New filter, based on a per-site
reviewed_atstamp. Clicking into a site, a per-row check, or mark-all clears them. - A Footer card in the Navigation tab: a tagline and up to four columns of links, validated on the server. A site that never touches it keeps the neutral fallback.
- A media library: every image field in the editor and post form has a Browse library button over the site's own storage folder, with thumbnails, paging, filename search and upload.
- A Media page in every site's admin: multi-file upload with drag-and-drop and a progress line, per-file failures collected into one toast, and Copy URL on each image.
- A Site title field in the Site tab, so renaming a site is a settings change.
- Products get their own Settings tab for the product type's name, singular and nav toggle alongside currency and Stripe. Post Types now manages content types only, and the product type can't be deleted.
Changed
- Blocks are spacing-blind: section-family padding is neutralized once in the app config, the block stack pays interior boundaries with a single gap, and the page pays its own edges once. Painted surfaces keep their padding. The hero keeps its own stage-sized padding by design. (Template note: the override targets the generated Nuxt UI theme slots, so a future major Nuxt UI release that renames them would quietly bring doubled spacing back until
app.config.tsis re-pointed.) - Brand protection guards the current site's own name per render, never shared state, so one tenant's brand cannot bleed into another's pages. The fallback navigation and footer offer only what the site actually has.
Fixed
- Custom domain status read "unknown" for every domain because the DNS check called an endpoint that doesn't exist.
- Team members without photos show initials instead of blank circles.
- Invite links minted by the provisioning script now honor the intended redirect.
2026-09-22
- Members of the default site act as platform operators and pass the membership check on every site without being listed in any tenant's team.
- Redeploy to pick up the production Vercel token that the signup endpoint's domain-attach step needs.
2026-09-12
Added
- Self-serve signup: a Signup Form block (name, email, site name with a live subdomain preview) provisions a real site. It slugifies the name past a reserved-word list, refuses collisions, rate-limits per email and globally, seeds starter content, attaches the subdomain on Vercel, and mails the owner an invite. Vercel or mail failures never break the visitor.
- Admins can remove a member from their site in Settings → Users. Only this site's membership is deleted, never the account or other sites, and self-removal and removing the last member are refused.
Fixed
- A removed member who signs in is told plainly that their account is no longer active on this site, with no code mailed, instead of meeting silent 403s.
2026-09-11
- Per-user Claude Code settings are ignored by git, since the repository is a template.
2026-09-04
Arc: from a single site to a multi-tenant platform.
Added
- Tenancy foundation: a
sitestable (one default site, the fallback that makes a self-hosted install a platform of one),site_domainsmapping hostnames to sites, andsite_usersmembership. The existing deployment becomes the first tenant and claims all existing rows and users. - The tenant is resolved from the hostname on both the client and the server, and carried through every read and write. All admin endpoints require site membership (403 across tenants), stamp inserts server-side and scope updates and deletes. Uploads are prefixed by site, checkout and the webhook carry the site, and cache purges stay within the edited tenant. Suspended sites return 503.
- Constraints enforced:
site_idis mandatory with foreign keys, slugs are unique per site (so every site can have its ownhome), and settings tables become one row per site. - One-command provisioning for a new site: site row, subdomain, seeded Work and Products types, starter Home and About pages, settings, Vercel attach, owner invite and enrollment. It is idempotent.
- Contact form submissions are delivered through the site's mail, falling back to the platform's, with the visitor as Reply-To. They go to the site owner's login address, and a delivery failure is logged and still succeeds for the visitor.
Changed
- Every site shows its own name in the header, footer, copyright and page and post titles; the template no longer carries the first tenant's brand. The footer defaults to a neutral "Get in touch" column.
- Subdomains are minted under the platform's own domain with a wildcard certificate, so a new site needs no per-domain attach to go live. Custom components now use the
Orprefix.
Fixed
- The provisioning seed no longer inserts a retired settings column.
2026-09-03
Added
- Public pages are served from the ISR cache on Vercel. Every admin write, and the webhook marking an original sold, purges its affected paths and immediately re-requests them, so edits go live in seconds. Local dev and self-hosted installs keep per-request rendering.
Changed
- Every content write (posts, pages, post types, site settings) goes through server endpoints that check the session and two-factor and use an allow-list of fields, and direct browser writes to the database are removed. Image uploads use server-minted signed URLs.
Fixed
.vercelbuild output is never committed; it had caused Vercel to skip the real build and the migration runner.
2026-08-25
Arc: owner-configured email and two-factor sign-in.
Added
- Settings → Email: SMTP host, port, user and password (write-only; only status is shown), From address and name, a send-test button, and a require-2FA switch that arms only once mail is configured. Login gains an emailed six-digit code step, and every admin API endpoint requires the resulting cookie. Invites and password resets move onto the site's own mailer, falling back to the sender built into Supabase until SMTP is set up.
- Provider presets with helper cards for popular mail services (including a plain warning for consumer accounts that no longer allow app passwords and a note about Workspace accounts), plus Postmark and another API-key sender. Stored mail secrets are encrypted at rest.
- Product pages offer originals and prints: a Print edition reveals a quantity stepper (1 to 10) with the line total and unit price. Selling out closes only the original, and the server re-derives edition, quantity and price itself.
- Every palette slot has a color picker, in light and dark: primary, neutral, wall, ink, header and footer. Primary and neutral accept any hex and generate a full ramp. Unset dark slots fall back sensibly.
Changed
- The public header is now stock Nuxt UI (header and navigation menu) and its stylesheet is gone.
- Footer and border tones derive from the wall and ink colors unless explicitly picked, so custom and dark palettes stay consistent.
Fixed
- Browsers with forced-dark features no longer repaint the site; the public pages declare their color scheme, and the login pages are forced light.
- Visitor dark mode now paints the whole page, including the wall and mobile menu, not just the header and text.
2026-08-24
Arc: settings and theming.
Added
- Settings becomes a tabbed shell: Site, Appearance, Navigation, Post Types, Products and Users.
- The navigation is data: a drag-to-reorder editor with one level of nesting, rendered with hover dropdowns on desktop and indented groups on mobile.
- Appearance themes the site: primary and neutral colors, wall and ink, and display and body font pairings, applied on the server with no flash. An empty theme leaves the site pixel-identical.
- Heading appearance: per-level H1 to H4 size, face and color.
- Opt-in visitor dark mode for devices that prefer dark, with its own dark wall and ink pickers; off by default, and independent of the admin's dark toggle.
- The masonry gallery's layout moves into the platform's first custom component.
Changed
- The Ink color now governs block headings and titles everywhere on the public site.
- Hand-rolled gallery header, table of contents, back links, sections, news and pricing grids, and the footer are replaced with stock Nuxt UI components; about 630 lines of dead CSS are deleted.
- Public pages ignore the admin's dark-mode toggle, which had turned pricing cards black on the cream wall.
Fixed
- Applying a saved theme no longer crashes server rendering, and the color swatches paint.
- The Wall and Ink fields use Nuxt UI's color picker instead of the browser's native one.
2026-08-23
Arc: the editor, the dashboard, and the shop.
Added
- The admin is rebuilt on the Nuxt UI Dashboard template, with sidebar navigation for Posts, Pages and Site Settings.
- Pages are edited on a Notion-style canvas: free prose and structured blocks in one document, inserted with slash commands or a toolbar, reordered with a drag handle, and edited in place as the real public components. A per-page layout setting offers full-width or a sidebar. Legacy pages render unchanged and convert on first save.
- Posts get the same full editor for their descriptions, and the post editor mirrors the public post page, with metadata in a Settings slideover. Page and post editing take over the whole window with a slim top bar so the canvas matches visitors' viewport, and the editor always previews in the site's light palette.
- The block catalog is complete: 17 more blocks (buttons, badges, avatar group, separator, banner, callout, FAQ, tabs, carousel, marquee, table, timeline, steps, team grid, testimonials, pricing table, auth form), a Contact Form block (with validation and a spam trap), a Contact page, and a Changelog Entry block. Each block is its own lazily loaded chunk.
- One page template serves the whole public site, with page identity stored in the database. The editor's settings popover sets title and SEO fields, and a New page modal creates pages that are live at once.
- Post types: create types in Settings, each with a field bundle and its own nav label, rendered by one template as artwork, article or product. A Masonry Gallery block powers archives. Products take a price and a Sold switch, and sell through hosted Stripe Checkout, with a webhook that records orders and marks one-of-one pieces sold. Both degrade to 501 until Stripe keys exist.
- Database migrations run automatically on every deploy through a ledger-based runner in the build, skipping gracefully where no connection string exists. This is the first step of the template's install story.
- Settings → Users lists everyone with admin access (role, Active or Invited, last sign-in), with resend invite and change password. The login page gains Forgot password.
- Remember me on the admin login keeps the email, shown masked, with a "Not you?" link. The password is never stored.
- A delete button on the pages list.
Fixed
- Admin pages no longer log you out on hard refresh; the admin is a real single-page app.
- The admin's theme no longer bleeds into the editor canvas, and the theme flash going into the editor is gone.
- Password fields use the native input with an eye toggle, so password managers autofill.
2026-08-22
Arc: from one artist's gallery to a block-based site.
Added
- An admin panel at
/adminbehind Supabase Auth: a posts dashboard and a post form with photo upload. Invites by email with a set-password screen (8+ characters, a number and a special character, with a live strength meter), resend for pending invites, and a clear message when the email rate limit is hit. - The site becomes multi-page: a full Work page in a masonry layout at true aspect ratios, an About page, and a curated homepage of featured works.
- Pages are ordered lists of blocks stored in the database, with an admin page builder for adding, removing and drag-reordering blocks. The catalog grows to 15 types built on Nuxt UI page components, grouped by category in the Add menu, with repeatable items and per-item photo upload.
- Site settings with a currency choice that prefixes plain prices in Pricing Plans with the right symbol, including comma-grouped amounts.
- A "Prevent the brand from being translated" toggle protects the site's brand name wherever it appears, including post titles and all block text.
- New posts saved without a photo get a placeholder image. Post descriptions render as real paragraphs.
Changed
- Blocks are themed through the Nuxt UI app config with a sharp, no-radius look and warm neutrals.
- A piece's own page shows the whole image uncropped (capped at 80% of the viewport height).
Fixed
- The posts dashboard showed none of the posts because signed-in users had no read policy.
- "Add a block" failed silently over plain HTTP on a local network because it relied on a secure-context API.
- Vercel installs no longer fail: Windows-only native bindings are removed, and Vercel resolves dependencies fresh instead of using the local lockfile.
2026-08-20
- The first version: a Nuxt site whose work posts live in a Supabase database, each with its own detail page at
/work/[slug]. - The Supabase module is replaced by the client library used directly, working around the module's imports failing when the project path contains parentheses.