alpha
Login
Join now
tyler.fun
/
chalky.town
Star
Starred
Star
Something went wrong. Try again.
Fork
0
Eye filled
Watch
Watching
Watch
a local-first atmospheric chalky task planner
Star
Starred
Star
Something went wrong. Try again.
Fork
0
Eye filled
Watch
Watching
Watch
Overview
Overview
Issues
Issues
Pulls
Pulls
Pipelines
Pipelines
chalky.town
/
src
/
lib
5 folders
·
17 files
at
main
tyler.fun
·
app: subtask rows show the pointer, not the open hand — svelte-dnd-action writes an inline cursor: grab on each row, which showed in the ~2.5px slivers above/below the 24px checkbox and the 7px gap before the label, so hovering onto the checkbox flickered through a grab hand. .sub:not(.add) now takes --cur-pointer (!important over the inline style) and .sub:active keeps --cur-grabbing; html.dragging's id-scoped rule still wins mid-drag. Verified in the preview with elementFromPoint: the row's top/bottom edges and the check→label gap all resolve to the pointer, the Add subtask row stays default
·
22h ago
18f9f1e4
atproto
app: reopenSession no longer leaks a failed replacement client or races itself — a failed client.restore() left clientP pointing at the new (also-dead) client with the old one dropped undisposed (a leaked BrowserOAuthClient + IDB connection per failed reopen, repeating every cycle while a WebKit glitch persists) and nothing stopped a second concurrent reopenSession from doing the same off a stale prev/installed pair; roll clientP back to prev on failure (guarded against a concurrent swap), dispose the failed client, and serialize all reopenSession calls behind one in-flight promise. Also retry restore() once after a confirmed false "deleted by another process" (reusing falseDelete) — the trail showed the replacement's first restore losing that same async confirmation race the original bug did.
1w ago
components
app: subtask rows show the pointer, not the open hand — svelte-dnd-action writes an inline cursor: grab on each row, which showed in the ~2.5px slivers above/below the 24px checkbox and the 7px gap before the label, so hovering onto the checkbox flickered through a grab hand. .sub:not(.add) now takes --cur-pointer (!important over the inline style) and .sub:active keeps --cur-grabbing; html.dragging's id-scoped rule still wins mid-drag. Verified in the preview with elementFromPoint: the row's top/bottom edges and the check→label gap all resolve to the pointer, the Add subtask row stays default
22h ago
db
app: sync survives iOS PWA suspension — cycle watchdog + reopen the OAuth client's dead IndexedDB connection (r.expiresAt crash, then a hung cycle wedged the loop until relaunch), idb.ts drops/retries dead connections; drop the SVG-filter chalk grain — Safari re-rasterized it on every repaint, 30–60Mpx frames mid-drag
2w ago
fonts
app: self-host the Gluten webfont so it renders offline
2mo ago
store
app: right-click a subtask for Copy / Delete — the details panel's checklist rows open the shared ContextMenu (above the panel, z 45 over 41) via a new ui.subContext {taskId, subId, day}. Copy writes the subtask's plain text (autolink brackets unwrapped, no checkbox prefix); Delete goes through store.setSubtaskText(…, "", day) like the row's trash button, so one undo restores it. The edit textarea keeps the native menu and Ctrl+Shift stays the fast-delete. The menu's Escape now listens in capture and stops there, so it closes only the menu, not the details panel under it. Verified in the preview with synthesized contextmenu events: Copy → "second https://example.com", Delete drops the row and ⌘Z brings it back, body Escape leaves the panel open
1d ago
checklist.ts
app: add console occurrence migration, nested checklist paste, click-to-open Someday
2mo ago
config.ts
app: integer-only order/rank on the wire — lex-data rejects floats, so halved orders and x.5 movedRanks stranded dirty edits behind a failing batch; day renumbering, scaled integer `rank` (legacy movedRank read ×1024), wire-boundary coercion, per-record push failures no longer abort the rest; recurring drag reorders the series template; patch oauth-client-browser to treat WebKit's null IDB miss as not-found (r.expiresAt crash) and stop reopening on it
2w ago
date.ts
app: snooze a recurring occurrence — "Snooze 1 day" (the occurrence's day + 1) or "Snooze to other day" (reveals a date field, min = day + 1) in the right-click menu and the details panel's new "Snooze this day" row, offered only on unfinished occurrences. store.snoozeOccurrence skips that day from the series and drops a detached one-off copy (title, color, notes, subtasks with fresh ids) onto the target day, appended, as one undo step — no lexicon change, the occurrence record stays a pure done/skipped decision. New date.ts shiftKey steps by calendar date so DST can't double a day. The revealed date field focuses and calls showPicker() where allowed; the swap is height-pinned (menu row 29px like an item, panel row 38px) so neither the menu nor the card shifts. Verified in the preview: Mon→Fri via custom date and Tue→Wed via 1 day land the copy and empty the source day, one undo restores both, menu stays 188px and the card 561.5px across the reveal
1d ago
debug-cursor.ts
app: re-prime cursor paint on tab wake to heal the stuck pencil
2mo ago
demo.ts
app: add a read-only /demo/<handle> board
1mo ago
export.ts
app: add task sort strategies, simplify copy menu, drop occurrence migration
2mo ago
haptics.svelte.ts
app: full-height drag drop zones, touch haptics + press-and-hold drag
2mo ago
hlc.ts
app: field-level LWW sync on hybrid logical clocks
2w ago
linkify.ts
app: 3-day view, malleable sort with pinnable manual order, clickable subtask links
2w ago
markdown.ts
app: right-click a subtask for Copy / Delete — the details panel's checklist rows open the shared ContextMenu (above the panel, z 45 over 41) via a new ui.subContext {taskId, subId, day}. Copy writes the subtask's plain text (autolink brackets unwrapped, no checkbox prefix); Delete goes through store.setSubtaskText(…, "", day) like the row's trash button, so one undo restores it. The edit textarea keeps the native menu and Ctrl+Shift stays the fast-delete. The menu's Escape now listens in capture and stops there, so it closes only the menu, not the details panel under it. Verified in the preview with synthesized contextmenu events: Copy → "second https://example.com", Delete drops the row and ⌘Z brings it back, body Escape leaves the panel open
1d ago
oauth-scope.ts
app: private mode syncs direct to the PDS via atproto Spaces — HappyView retired
2w ago
palette.ts
app: contrast-aware chip ink — invert to light text on dark tints, preview shares the logic
2w ago
recur.ts
app: build the repeat picker with richer recurrence rules and per-occurrence records
2mo ago
swipe.ts
app: swipe sideways to page the board — a one-finger flick over Day, 3 Day or Week steps it like ←/→ (a day, the window by a day, a week), with a light haptic and a 180ms slide-in (skipped under reduced motion). Touch events, passive, judged on lift: axis locks after 10px so a scroll that starts vertical stays one; needs ≥60px, |dx| ≥ 2|dy|, under 700ms. Ignored from the 24px screen edges (Safari's back swipe), text fields/editors, sideways scrollers, and while a drag, marquee, inline edit, details panel or context menu owns the touch. Month is excluded (its grid scrolls sideways on phones) and Someday sits outside the wrapper. Verified in the preview at 375px with synthesized touches: day 10-05→06→07→06, week 10-12→19→12, 3 Day 10-13→14; month, Someday, vertical-ish and edge swipes don't move
2d ago
sync-log.ts
app: add a persistent sync debug trail for the debug account
1mo ago
types.ts
app: integer-only order/rank on the wire — lex-data rejects floats, so halved orders and x.5 movedRanks stranded dirty edits behind a failing batch; day renumbering, scaled integer `rank` (legacy movedRank read ×1024), wire-boundary coercion, per-record push failures no longer abort the rest; recurring drag reorders the series template; patch oauth-client-browser to treat WebKit's null IDB miss as not-found (r.expiresAt crash) and stop reopening on it
2w ago
url.ts
app: private mode syncs direct to the PDS via atproto Spaces — HappyView retired
2w ago