···11+# Sections: launch TODO
22+33+Everything needed before sections can be enabled for all users (remove feature flag).
44+55+## Critical / Blocking
66+77+- [ ] **Page copy must include sections** — the copy route (`/p/[[page]]/copy/+page.svelte`) only copies cards today; section records are silently dropped, so the copied page loses all structure and non-grid section types
88+- [ ] **Migration for existing users** — `ensureSections()` in `migrate.ts` synthesises a single grid section for legacy pages, but verify this works cleanly for users who already have cards with no `sectionId` across multiple pages
99+1010+## Section editing UI gaps
1111+1212+- [ ] **Gallery section: column count control** — `sectionData.columns` is read but there's no UI to change it
1313+- [ ] **Gallery section: gap control** — `sectionData.gap` is read but there's no UI to change it
1414+- [ ] **Text section: alignment/size controls** — `textAlign` and `textSize` are in `sectionData` but no editing UI exposes them
1515+- [ ] **Row section: scroll mode control** — `sectionData.scrollMode` (`'scroll'` | `'fit'`) has no UI toggle
1616+- [ ] **Section renaming** — `section.name` field exists on the record but there's no input to edit it (SectionsModal only displays the name)
1717+- [ ] **Section duplication** — no way to duplicate a section (with or without its cards)
1818+1919+## Cross-section interactions
2020+2121+- [ ] **Move cards between sections** — cards are locked to the section they were created in; no drag-to-another-section or "move to section" action exists
2222+- [ ] **Section collapse/expand in editor** — all sections are always fully expanded; pages with many sections get unwieldy
2323+2424+## Section styling / customisation
2525+2626+- [ ] **Background color per section** — no way to set a section background (color, gradient, image)
2727+- [ ] **Padding / spacing controls** — no per-section padding or vertical gap control
2828+- [ ] **Section max-height** — only HeroSection enforces a height (`100dvh`); other sections grow unbounded
2929+3030+## Mobile
3131+3232+- [ ] **Mobile editing parity** — TextSection and RowSection don't have mobile-specific editing controls; the mobile editing warning modal is still shown as "experimental"
3333+3434+## Polish / UX
3535+3636+- [ ] **Empty state for TextSection editing** — no placeholder or guidance when the text content is blank
3737+- [ ] **SectionsModal improvements** — modal is functional but minimal; consider drag-to-reorder instead of up/down buttons, section type icons, and inline rename
3838+- [ ] **AddSectionButton visibility** — button is `opacity-0` until parent hover; may be hard to discover on touch devices
3939+- [ ] **Confirm before deleting a section with cards** — currently deletes immediately; should warn if the section contains cards
4040+4141+## Deferred / post-launch
4242+4343+- [ ] **External data sources** — see `docs/todo/external-section-sources.md`
4444+- [ ] **Section-level permissions / visibility** — e.g. hide a section from non-authenticated viewers
4545+- [ ] **Section templates** — pre-built section layouts users can pick from when adding a section
+53
docs/todo/subpages.md
···11+# Subpages — path to usability
22+33+Subpages already work record- and route-wise (`app.blento.page`, routes under `/[actor]/p/[page]`), but there is no UI to create them, no way to navigate between them, and several metadata gaps. This doc lists everything needed to make subpages a usable first-class feature.
44+55+## Creation & management
66+77+- [ ] Create-subpage UI
88+ - Pick slug → create `app.blento.page/blento.{slug}` record with empty sections
99+ - Initial name/description fields
1010+- [ ] Rename (display name) — write-back to `app.blento.page`
1111+- [ ] Change slug
1212+ - rkey is immutable, so: create new record + migrate cards/sections (`page` field) + delete old record
1313+- [ ] Delete subpage
1414+ - Cascade delete sections and cards where `page === 'blento.{slug}'`
1515+- [ ] Manage subpages panel (settings? edit bar dropdown?)
1616+- [ ] Slug validation
1717+ - Reserved: `self`, `edit`, `copy`
1818+ - Character restrictions matching rkey rules
1919+2020+## Discovery & navigation
2121+2222+- [ ] Navbar / nav links on the main page (and likely all pages)
2323+- [ ] "Link to subpage" card type (picks a subpage, renders name/icon)
2424+ - Arguably shares a data source with the navbar
2525+- [ ] Back-to-home affordance on subpages (logo/name tap? explicit home link?)
2626+- [ ] Subpages in sitemap / Contrail indexing — probably yes so shared links resolve fresh
2727+2828+## OG / metadata per page
2929+3030+- [ ] Per-subpage OG image
3131+ - `og-new.png` endpoint currently keys on actor only; include `page` in cache key + screenshot URL
3232+- [ ] Wire per-page title/description/icon from `app.blento.page` into `<Head>` on subpage routes
3333+3434+## Editing experience
3535+3636+- [ ] Entry point from main-page edit → switch to editing a subpage (page switcher in edit mode)
3737+- [ ] Verify self-copy flow for duplicating one of your own pages
3838+3939+## Navbar record placement — decision
4040+4141+Three options for where navigation links live:
4242+4343+- **A.** `site.standard.publication/blento.self` preferences — simplest, one record. But nav isn't really a "preference."
4444+- **B.** Extend `app.blento.page/blento.self` with a `navigation` array — clean, no new lexicon, couples nav to the main-page record.
4545+- **C.** New `app.blento.navigation/self` record — cleanest semantically, extra lexicon to maintain.
4646+4747+**Picked: B.** Main-page publication record is already the canonical site config, nav is sitewide and only edited from the main page. If per-subpage overrides ever become a need, migrate then.
4848+4949+## Open questions (not required for v1)
5050+5151+- Page privacy / password gating
5252+- Per-page theme overrides
5353+- Page templates / duplicate-as-template
···44</svelte:head>
5566<h1>Imprint</h1>
77-<p><em>Last updated: April 18, 2026</em></p>
77+<p><em>Last updated: April 19, 2026</em></p>
8899<p>
1010 Information in accordance with § 5 TMG (German Telemedia Act) and § 18 MStV (German
···91919292<h3>Copyright</h3>
9393<p>
9494- Content created by the operator of this site is subject to copyright law. Reproduction,
9595- processing, distribution, or any form of commercialisation of such material beyond the scope of
9696- copyright law requires the prior written consent of its respective author or creator.
9494+ Content published on this site by the operator (texts, images, and other media) is subject to
9595+ copyright law. Reproduction, processing, distribution, or any form of commercialisation of such
9696+ material beyond the scope of copyright law requires the prior written consent of its respective
9797+ author or creator.
9898+</p>
9999+<p>
100100+ The source code of blento is licensed separately under the MIT License and is available at
101101+ <a href="https://github.com/flo-bit/blento" target="_blank" rel="noopener"
102102+ >github.com/flo-bit/blento</a
103103+ >.
97104</p>
+61-9
src/routes/(legal)/terms/+page.svelte
···44</svelte:head>
5566<h1>Terms of Service</h1>
77-<p><em>Last updated: April 18, 2026</em></p>
77+<p><em>Last updated: April 19, 2026</em></p>
8899<h2>1. Scope and Acceptance</h2>
1010<p>
···9898 appropriate. Where feasible, we will provide a statement of reasons for any action taken.
9999</p>
100100101101-<h2>8. Disclaimer</h2>
101101+<h2>8. Copyright Complaints and Counter-Notices</h2>
102102+<p>
103103+ If you believe that content rendered via blento infringes your copyright, you can notify us by
104104+ emailing <a href="mailto:hello@blento.app">hello@blento.app</a>. Please include:
105105+</p>
106106+<ul>
107107+ <li>a description of the copyrighted work you believe has been infringed;</li>
108108+ <li>the exact URL(s) of the allegedly infringing content on blento;</li>
109109+ <li>your name, postal address, email, and where available a phone number;</li>
110110+ <li>
111111+ a good-faith statement that the use of the material is not authorised by the copyright owner,
112112+ its agent, or the law;
113113+ </li>
114114+ <li>
115115+ a statement that the information in the notice is accurate and that you are the copyright owner
116116+ or authorised to act on their behalf;
117117+ </li>
118118+ <li>your physical or electronic signature.</li>
119119+</ul>
120120+<p>
121121+ <strong>How removal works on blento.</strong> Because content you create on blento is stored on the
122122+ user’s own PDS on the AT Protocol network and not hosted by us, our remedy is to stop rendering
123123+ the identified content or site via blento. The underlying record remains under the user’s control
124124+ on atproto and may continue to be available through other applications.
125125+</p>
126126+<h3>Counter-notice</h3>
127127+<p>
128128+ If your content was removed or access to it was disabled and you believe this was in error or
129129+ misidentification, you may send a counter-notice to
130130+ <a href="mailto:hello@blento.app">hello@blento.app</a> containing:
131131+</p>
132132+<ul>
133133+ <li>your contact information (name, address, email);</li>
134134+ <li>identification of the material removed and the URL(s) at which it appeared;</li>
135135+ <li>
136136+ a statement, made in good faith, that the material was removed as a result of mistake or
137137+ misidentification;
138138+ </li>
139139+ <li>your physical or electronic signature.</li>
140140+</ul>
141141+<p>
142142+ We will review counter-notices in good faith and respond by email within a reasonable timeframe.
143143+ This process operates alongside the internal complaint-handling rights available to you under
144144+ Article 20 of the EU Digital Services Act.
145145+</p>
146146+<h3>Repeat infringers</h3>
147147+<p>
148148+ We may, in appropriate circumstances and at our discretion, refuse service to atmosphere accounts
149149+ (DIDs or handles) that are repeatedly the subject of substantiated infringement notices, as well
150150+ as to parties who repeatedly submit unfounded, inaccurate, or abusive notices.
151151+</p>
152152+153153+<h2>9. Disclaimer</h2>
102154<p>
103155 The Service is provided as is and as available. We do not warrant that the Service will be
104156 uninterrupted, error-free, or that cached third-party content will be current or accurate.
105157 Statutory warranty rights under German law remain unaffected.
106158</p>
107159108108-<h2>9. Liability</h2>
160160+<h2>10. Liability</h2>
109161<p>
110162 We are liable without limitation for damages caused by intent or gross negligence, for injury to
111163 life, body, or health, under the German Product Liability Act (ProdHaftG), to the extent of any
···125177 law.
126178</p>
127179128128-<h2>10. Termination</h2>
180180+<h2>11. Termination</h2>
129181<p>
130182 You may stop using the Service at any time. On request to
131183 <a href="mailto:hello@blento.app">hello@blento.app</a> we will delete any data we hold about your account
···133185 these Terms, with notice where reasonably possible.
134186</p>
135187136136-<h2>11. Changes to These Terms</h2>
188188+<h2>12. Changes to These Terms</h2>
137189<p>
138190 We may update these Terms where necessary, for example to reflect legal changes or new features.
139191 We will notify you of material changes at least 30 days before they take effect, by posting the
···143195 of the Service during this period if you do not agree.
144196</p>
145197146146-<h2>12. Governing Law and Venue</h2>
198198+<h2>13. Governing Law and Venue</h2>
147199<p>
148200 These Terms are governed by the laws of the Federal Republic of Germany, excluding the UN
149201 Convention on Contracts for the International Sale of Goods. If you are a consumer with habitual
···157209 statutory places of jurisdiction apply.
158210</p>
159211160160-<h2>13. Consumer Dispute Resolution</h2>
212212+<h2>14. Consumer Dispute Resolution</h2>
161213<p>
162214 The European Commission provides an online dispute resolution platform (OS):
163215 <a href="https://ec.europa.eu/consumers/odr" target="_blank" rel="noopener"
···166218 consumer arbitration board (§ 36 VSBG).
167219</p>
168220169169-<h2>14. Severability</h2>
221221+<h2>15. Severability</h2>
170222<p>
171223 Should any provision of these Terms be or become invalid or unenforceable, the validity of the
172224 remaining provisions shall not be affected.
173225</p>
174226175175-<h2>15. Contact</h2>
227227+<h2>16. Contact</h2>
176228<p>Questions about these Terms? Reach out via:</p>
177229<ul>
178230 <li>Email: <a href="mailto:hello@blento.app">hello@blento.app</a></li>