Commit Graph

312 Commits

Author SHA1 Message Date
Julien Calixte
1f324208d2 design(stacked-notes): action buttons in vertical bar 2026-05-04 10:54:50 +02:00
Julien Calixte
002cf9a4b1 fix(stacked-note): act on outdated badge clicks
Clicking the badge while it shows outdated now pulls the latest version
from GitHub when there are no unsaved edits, or opens the conflict
modal when edits are in flight. Previously the click only re-ran the
same freshness check, so the badge appeared dead.
2026-05-03 23:37:28 +02:00
Julien Calixte
d31c774ace feat(stacked-note): surface note freshness and guard saves on conflict
Adds a Tabler-icon badge in the stacked-note action bar showing whether
the loaded copy still matches GitHub HEAD (verified / outdated / offline
/ checking / unknown / stale-known). The save flow now re-checks before
the PUT and opens a conflict modal when GitHub has moved on, with three
explicit choices: discard local edits and pull, overwrite anyway, or
cancel. Race-condition 409s from the PUT itself are routed through the
same modal.
2026-05-03 23:32:54 +02:00
Julien Calixte
3339e28d41 style(notes): distinguish scrollable column from canvas
Tint the surrounding viewport and add a soft right-edge shadow on
the leftmost note so users can see where scrolling actually applies.
2026-05-02 09:51:24 +02:00
Julien Calixte
f562ca48b1 docs(welcome): link footer atproto entry to atproto.com 2026-05-02 09:16:14 +02:00
Julien Calixte
7c40feeae0 style(welcome): drop network card hover left border 2026-05-02 09:08:09 +02:00
Julien Calixte
4d7b7d01f6 fix(welcome): keep network strip from widening the hero grid
Grid items default to min-width: auto, so the 5×220px scroll strip
forced the 1.2fr column to its intrinsic width and pushed the right
column out. min-width: 0 lets the track shrink and overflow-x scroll.
2026-05-02 08:31:04 +02:00
Julien Calixte
c78ce38845 docs(welcome): rephrase public-notes label to fit pool metaphor 2026-05-01 23:54:24 +02:00
Julien Calixte
b572380c37 feat(welcome): show live public-notes preview inline
Replaces the static "From the open network" CTA and sidebar button with a
horizontal strip and compact list of recent public notes fetched from the
public api.remanso.space/notes endpoint, so visitors can taste the network
before clicking through. Includes shimmer skeletons and a quiet fallback
when the endpoint is unreachable.
2026-05-01 23:27:55 +02:00
Julien Calixte
43c5e65077 docs(welcome): rephrase zettelkasten closing line for clarity 2026-05-01 12:40:56 +02:00
Julien Calixte
7b5af57941 fix(welcome): make zettelkasten link example read grammatically 2026-05-01 12:18:17 +02:00
Julien Calixte
abda5264a8 feat(welcome): use tabler svg icons for feature row 2026-05-01 12:16:36 +02:00
Julien Calixte
7b4c7947aa fix: remove bottom padding 2026-04-29 22:06:58 +02:00
Julien Calixte
68022971cd refactor(notes): restore fixed mobile heights for scroll math
Re-pin .note and .stacked-note to 100dvh on mobile and bring back the
container height in useResizeContainer so (index + 1) * height has a
reachable scroll target. Switch the polled scroll helper to that same
formula instead of offsetTop.
2026-04-29 11:32:23 +02:00
Julien Calixte
f529832eee refactor(notes): scope stacked-note sticky to desktop
Move position: sticky from the global .note rule into the desktop
@media block of the scoped stacked-note components, so mobile no longer
inherits sticky positioning (and no top is set there).
2026-04-29 11:32:13 +02:00
Julien Calixte
3e9418285f refactor(notes): let mobile notes size to content 2026-04-29 11:09:31 +02:00
Julien Calixte
adb1bd5945 fix: fix height on mobile 2026-04-29 10:34:46 +02:00
Julien Calixte
86866e7d77 feat(welcome): wire demo note links with stack reveal and flash 2026-04-27 23:10:29 +02:00
Julien Calixte
cf5567de7c refactor(notes): use options object for renderCodeFile params 2026-04-27 20:36:46 +02:00
Julien Calixte
9d6f70546e feat(notes): render code files with Shikiji syntax highlighting
Non-markdown files opened as stacked notes are now highlighted using
the existing markdown-it-shikiji pipeline (4-backtick fence wrapping)
with a h1 filename heading. Edit controls are hidden for code files.
Adds alloy language grammar and a fileLanguage utility mapping
extensions to Shikiji language IDs.
2026-04-27 19:57:15 +02:00
Julien Calixte
78de5e280f feat: show GitHub sign-in when repo is not accessible
Adds a message + sign-in button in FluxNote when the readme resolves
to null (private/unauthorized repo), and on the SpaceCowboy 404 page.
2026-04-27 10:12:09 +02:00
Julien Calixte
28ca9a17a9 fix(FluxNote): stop skeleton showing when repo is inaccessible
The skeleton was conditioned on `isLoading || !hasContent`, so it
persisted forever when readme resolved to null (e.g. private repo
visited while logged out). Skeleton now only shows while loading.
2026-04-27 10:07:08 +02:00
Julien Calixte
c00065ce4a refactor(navigation): scrollToFocusedNote takes an options object
Smooth-scroll for the anchor jump when the target note is already
stacked, instant otherwise. While threading the new flag, the four
positional params got hard to read, so collapse them into
{ noteId, notes, hash, smoothHash } and update all call sites.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 09:56:32 +02:00
Julien Calixte
d098b3b404 fix: no more clip overflow y 2026-04-25 00:02:12 +02:00
Julien Calixte
e03ff49764 fix(mobile): restore overflow-y and unstick readme on vertical scroll
- Restore explicit overflow-y:auto on #main-app for mobile (removed in
  63f5d64) — implicit coercion from overflow-x:auto is not reliable in
  all Safari/WebKit versions.
- Override position:sticky on .readme to position:relative on mobile.
  The desktop sticky (left:0) is correct for horizontal scroll, but on
  mobile vertical scroll it pinned the 100dvh-tall readme across the
  entire viewport, hiding all stacked notes behind it.
2026-04-24 23:42:22 +02:00
Julien Calixte
ded770aff1 fix(mobile): restore body scroll and prevent spurious section scroll
Three layered fixes for mobile note scrolling:

1. app.css / App.vue: on mobile, override overflow:hidden on html/body
   and overflow:visible on #main-app so content from useResizeContainer
   (which sets the note-container height to (n+1)*100vh) propagates to
   the document and document.body.scrollTop works again.

2. FluxNote.vue: give each .note an explicit height:100dvh on mobile so
   the percentage-based height:100% does not resolve against the
   inflated container height set by useResizeContainer.

3. StackedNote / StackedPublicNote: replace overflow-y:hidden with
   overflow-y:clip on the section. Unlike hidden, clip does not create a
   scroll container, so touch events fall through to the page scroll and
   the section never feels "draggable" when content fits within the note.
2026-04-23 17:58:33 +02:00
Julien Calixte
d12d7b660b Revert "fix(layout): make stacked notes stick horizontally when scrolling"
This reverts commit 86c9feaf55.
2026-04-22 23:59:36 +02:00
Julien Calixte
86c9feaf55 fix(layout): make stacked notes stick horizontally when scrolling
Add left offset to each stacked note so position: sticky activates
during horizontal scroll, pinning notes progressively to the right
of the readme column at calc((index + 1) * var(--note-width)).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 23:56:43 +02:00
Julien Calixte
449a16f791 fix(layout): prevent document-level scroll-y when stacked notes overflow
Contain horizontal overflow within #main-app instead of leaking to the
document, which caused a horizontal scrollbar to consume viewport height
and trigger an unwanted vertical scrollbar. Also fix note pane height
to use 100% instead of 100vh, and switch useResizeContainer to minWidth
so the flex container can grow when the window is wider than the notes.
Add a window resize listener to keep the value accurate on resize.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 23:52:03 +02:00
Julien Calixte
1f272bc3e2 fix: no more after for repos 2026-04-22 23:01:40 +02:00
Julien Calixte
29c22a9b0f copy(home): reframe manifesto sentence without negative framing 2026-04-20 18:23:47 +02:00
Julien Calixte
5c76170645 style(home): adjust CTA card width from w-2xl to w-xl 2026-04-20 18:19:42 +02:00
Julien Calixte
ceb800b6ac refactor(home): replace gh-form pill with DaisyUI input + joined button
Wrap inputs in <label class="input"> (DaisyUI v5 compound input pattern).
Form uses flex fill so inputs auto-size and the button stays on the right
on a single line regardless of container width.
2026-04-20 18:15:12 +02:00
Julien Calixte
f809a1f5f8 style(home): enlarge GitHub repo and open network CTA cards 2026-04-20 18:00:42 +02:00
Julien Calixte
5cda110a98 style(home): sharpen hero headline and lede copy
"settles into a pool" → "comes to rest" (clearer double meaning)
"margin enough to think" → "where your thinking finally runs clear"
2026-04-20 17:58:45 +02:00
Julien Calixte
ce690b6767 fix(home): remove z-index from footer/main so PWA toast is not obscured 2026-04-20 17:17:24 +02:00
Julien Calixte
73253c9ad2 style(home): replace "Link, don't file" with "Link, don't nest" 2026-04-20 16:44:17 +02:00
Julien Calixte
369d730f70 feat: highlight on link clicked 2026-04-20 16:41:09 +02:00
Julien Calixte
668f73b546 feat(home): highlight linked note card on "durable enough" click 2026-04-20 16:38:00 +02:00
Julien Calixte
b1be42b5bf feat(home): redesign homepage with editorial and launchpad layouts
Replace the minimal centered layout with a full literary/academic
homepage: logged-out users see an editorial hero, manifesto, demo
notes, and ZK primer; logged-in users see a personal launchpad
(greeting, repo tiles, last visited, review queue) followed by the
same editorial content below.

Uses DaisyUI CSS variables throughout (color-mix) so it adapts to
any theme change without hardcoded overrides.
2026-04-20 14:32:48 +02:00
Julien Calixte
1fa66d8594 fix: prevent spurious y-scrollbar when section has overflow-x: auto on mobile
Setting overflow-x: auto forces overflow-y off 'visible' per CSS spec,
which caused an unwanted vertical scrollbar in stacked note sections.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 14:28:25 +02:00
Julien Calixte
b827f31cf0 fix: current color for svg in buttons 2026-04-19 10:49:37 +02:00
Julien Calixte
0a4f8dbf41 fix: make BackButton and LinkedNotes keyboard accessible
Replace <a> (no href) with <button> so both elements receive tab focus.
BackButton gets text-base-content to preserve icon color; LinkedNotes
uses btn class="link" to keep the inline text-link appearance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 01:08:34 +02:00
Julien Calixte
b6f6759af5 fix: restore icon color on button elements in header
<button> gets color:ButtonText from the browser UA stylesheet, making
SVG stroke="currentColor" render black. Add text-base-content to
inherit the DaisyUI theme color like the <a>-based router-links do.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 01:07:25 +02:00
Julien Calixte
c42c26a407 fix: restore icon color on FontChange trigger button
<button> defaults to color: ButtonText (black) in browsers, unlike <a>
which inherits. Adding color: inherit restores the theme color for the
SVG stroke (which uses currentColor).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 01:06:25 +02:00
Julien Calixte
cfe5ef8fcd fix: make HomeButton keyboard accessible
Replace <a> with <button> so the home logo receives tab focus.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 01:04:50 +02:00
Julien Calixte
4c5116bc89 fix: make FontChange modal trigger keyboard accessible
Replace <a> with <button> for the typography icon in HeaderNote so it
receives tab focus — <a> without href is excluded from the tab order.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 01:02:12 +02:00
Julien Calixte
73a6014750 fix: persist font selections across navigation and page reloads
- Use v-model with writable computeds instead of :value+@change so selects
  re-sync when the options list changes asynchronously
- Always include currently chosen fonts in sortedFontFamilies so a selected
  font not present in .remanso.json fontFamilies still shows in the select
- Initialize userSettings instead of returning early in font setters so
  changes made before async GitHub fetch completes are not silently dropped
- Back font choices with localStorage so they survive hard reloads even when
  PouchDB/IndexedDB fails silently in the web worker
2026-04-06 18:51:27 +02:00
Julien Calixte
c197b80095 feat: smaller modal 2026-04-06 17:44:43 +02:00
Julien Calixte
3de9eb35f6 feat: show font family selectors with default fonts when no .remanso.json 2026-04-05 10:49:01 +02:00