Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
374e1c8
npm i
Jun 23, 2026
135a336
go
Jun 23, 2026
a9fb652
tabs update
Jun 24, 2026
2c4f3ff
overview
Jun 24, 2026
d0a40c9
LETS GO
Jun 24, 2026
339d375
LETS GO AGAIN
Jun 24, 2026
5e5493c
fix image count
Jun 24, 2026
9121aea
update
Jun 29, 2026
2998493
SHIP IT
Jun 29, 2026
35e84e6
SHIP IT
Jun 29, 2026
b63b3d9
GO
Jun 30, 2026
377dd24
go
Jun 30, 2026
0f5eef1
updates
Jun 30, 2026
ac9e07f
update
Jun 30, 2026
2e71974
avoid self referential bylines
Jun 30, 2026
7fadde6
GO
Jun 30, 2026
f1ee76e
go
Jul 1, 2026
e1cbed7
go
Jul 1, 2026
147f0f8
lets go
Jul 1, 2026
24a7fe3
tweaks
Jul 1, 2026
8c6d964
GO
Jul 1, 2026
7fec1cd
update
Jul 7, 2026
e27e084
cache trending
Jul 21, 2026
45d632e
scroll tabs to top when switching
Jul 21, 2026
cc8ce9c
go
Jul 22, 2026
b4ad9fc
go
Jul 22, 2026
6771bf2
go
Jul 27, 2026
67db26e
wikita-lite
Jul 27, 2026
5f0097c
push
Jul 29, 2026
ea5498b
push
Jul 29, 2026
2434ecc
polish for sharing
Jul 29, 2026
5972b81
fix suggestion loading
Jul 29, 2026
974ca98
capitalize
Jul 29, 2026
90d0306
force reload
Jul 29, 2026
5fa4b50
go
Aug 3, 2026
501985b
lots more card explorations
Aug 3, 2026
fcfea92
more!
Aug 3, 2026
1387041
advancements
Aug 5, 2026
1c36e45
lets go
Aug 5, 2026
d69debc
lets also go
Aug 5, 2026
0e823c9
further modes + explorations
Aug 12, 2026
8e2d78f
update
Aug 12, 2026
e6fa8c2
update more
Aug 12, 2026
b8c735e
more explorations
Sep 1, 2026
1016f36
more exploraitons
Sep 1, 2026
2b02736
merge main
Sep 7, 2026
2822bfb
format + merge
Sep 7, 2026
8014b1c
move example to examples
Sep 7, 2026
d2334dc
remove API contact setting
Sep 7, 2026
30f68b0
add onboarding flow
Sep 9, 2026
1e40e53
port over onboarding, further improvements and steps towards prototype
Sep 9, 2026
d59f868
further improvements
Sep 9, 2026
4000dc0
card fix and further steps towards discord call demo
Sep 9, 2026
cab67f4
lets go Amin!
Sep 9, 2026
60b6ae1
Save pages from logged out
Sep 9, 2026
987f009
Disable saving daily reads while they load
Sep 9, 2026
be1df0c
save improvements
Sep 9, 2026
b551b36
fix scrolling cutting off the top of the fullscreen onboarding cards,…
Sep 9, 2026
9347159
use codex dialog actions
aminalhazwani Sep 10, 2026
3428aaa
change '/' with 'of'
aminalhazwani Sep 10, 2026
b546d7c
global overwrite for system font
aminalhazwani Sep 10, 2026
4164aa6
use large button
aminalhazwani Sep 10, 2026
912a1ee
fix dialog borders on scroll
aminalhazwani Sep 10, 2026
faf29d6
tweak spacing here and there
aminalhazwani Sep 10, 2026
bd4ef46
move description to dialog header slot
aminalhazwani Sep 10, 2026
ef797ff
fix feeds layout
aminalhazwani Sep 10, 2026
5fffad5
move description to dialog header slot
aminalhazwani Sep 10, 2026
ab34740
regular buttons for popover
aminalhazwani Sep 10, 2026
ec3d8b3
layout tweaks
aminalhazwani Sep 10, 2026
226ca80
dialog tweaks
aminalhazwani Sep 10, 2026
48a23c6
make tabs flow to the edge
aminalhazwani Sep 10, 2026
d450bf5
set accordion to minimal style
aminalhazwani Sep 10, 2026
4e7b67b
move tabs to the header in feed view
aminalhazwani Sep 10, 2026
4f94c02
tweak font sizes here and there
aminalhazwani Sep 10, 2026
ff87634
edit supporting text separator
aminalhazwani Sep 10, 2026
6ed19e3
tweak save button spacing
aminalhazwani Sep 10, 2026
ee95a7d
swap custom component with codex component
aminalhazwani Sep 10, 2026
4fe282b
add optional flag to account creation form
aminalhazwani Sep 10, 2026
bfdc3f4
add focus trap
aminalhazwani Sep 10, 2026
c676bb5
improve configure dialog
aminalhazwani Sep 10, 2026
7732ff7
remove home button (for now)
aminalhazwani Sep 10, 2026
8cd67a0
fix date
aminalhazwani Sep 10, 2026
37a3a6b
make clear accordion is temporary
aminalhazwani Sep 10, 2026
7c8bb1a
minor type tweaks
aminalhazwani Sep 10, 2026
40af1b2
set autocapitalize true account creation
aminalhazwani Sep 10, 2026
e58c551
some other minor styling tweaks
aminalhazwani Sep 10, 2026
440c3dc
more line height tweaks
aminalhazwani Sep 10, 2026
d0b4f4f
swap placeholder search results
aminalhazwani Sep 10, 2026
d8b6991
fix module button spacing
aminalhazwani Sep 11, 2026
7401dba
keep seed article as interest
aminalhazwani Sep 11, 2026
a628b3b
Wikitab
Sep 16, 2026
99f16b2
pinning
Sep 16, 2026
97746de
fix menu button menu padding
Sep 16, 2026
9dbe979
loading states and search lookahead
Sep 16, 2026
445a446
Search
Sep 16, 2026
67f7239
push
Sep 16, 2026
c7600ef
card hover states and link color
Sep 21, 2026
3853d29
Search results format
Sep 21, 2026
ee9a68c
tab navigation improvements
Sep 21, 2026
fc013ba
show correct user icon
Sep 21, 2026
78a51e8
improve supporting text of activity cards
Sep 21, 2026
cd0be2e
search results more like the home page
Sep 21, 2026
7155730
results page more like the home page
Sep 21, 2026
358ba85
Maintain tab when searching
Sep 21, 2026
d508508
mobile activity card layout
Sep 21, 2026
05139db
supporting text layout
Sep 22, 2026
9b8d9ff
more search improvements
Sep 22, 2026
3340658
push all changes
Sep 22, 2026
076598c
Show more spacing
Sep 22, 2026
08acffc
spacing
Sep 22, 2026
10f9e69
update spacing and wording
Sep 22, 2026
4b855bb
images and more
Sep 22, 2026
3773dbf
cleanup + NSFW cats
Sep 22, 2026
1370051
adjust spacing
Sep 23, 2026
29dfa3d
Colors and more
Sep 23, 2026
9ca89d4
bump
Sep 23, 2026
31f8282
save pages and configure
Sep 24, 2026
8fb7303
Daily reads
Sep 24, 2026
384a964
go
Sep 24, 2026
e2b0f99
go
Sep 24, 2026
8830adb
refresh discussions every 30 mins
Sep 24, 2026
8cc4919
reduce time for discussions refresh. fix overflow of module menu items
Sep 24, 2026
8c0d3eb
fix color change bug
Sep 24, 2026
7a09190
fix article links + images opening in new tabs
Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .agents/skills/protowiki-components/references/wrappers.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,39 @@ Does **not** set `data-skin` / `data-theme` — pass those on content inside the
</MobileWrapper>
```

### Overlays inside MobileWrapper

`MobileWrapper` provides `#mobile-wrapper-overlay` and
`provide( 'CdxTeleportTarget', overlayEl )` (a template ref, not a selector
string) so Codex popovers, bottom sheets, and dialogs teleport into a **fixed,
viewport-height** layer aligned with the phone column (not the scrollable page
height). Shared containment CSS lives in `src/styles/mobile-wrapper-overlays.css`.
The overlay element must appear **before** the default slot so the ref is set
before slot children mount.

**`CdxPopover` bottom sheets:** Codex only uses bottom-sheet layout when the
**browser viewport** is ≤639px. On wider viewports (typical desktop preview),
`use-bottom-sheet` falls back to floating popover mode. Add
`mobile-wrapper__sheet-popover` on the `CdxPopover` (teleport into the overlay
root is fine) so `mobile-wrapper-overlays.css` keeps the sheet anchored to the
bottom of the phone column:

```vue
<CdxPopover
v-model:open="open"
class="mobile-wrapper__sheet-popover"
use-bottom-sheet
:anchor="triggerRef"
>
…
</CdxPopover>
```

**Full-screen in-place dialogs** inside the frame: pass `render-in-place` to
`CdxDialog` so it stays within the phone column instead of teleporting to
`<body>`, then override the backdrop to `position: absolute` (it defaults to
`fixed`, which would cover the whole browser viewport rather than the frame).

## Why these wrappers?

The earlier draft of this repo had `ArticleLayout`, `ArticleBody`,
Expand Down
659 changes: 659 additions & 0 deletions .agents/skills/protowiki-wikitab/SKILL.md

Large diffs are not rendered by default.

117 changes: 117 additions & 0 deletions .agents/skills/protowiki-wikitab/references/state-and-storage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# State and storage

Wikitab splits persistence into three layers. Keep them separate — do not fold
feed cache into user config, and do not persist transient view state.

## Authoritative config (`wikitab-config-v*`)

User preferences for this browser profile live in
[`data/wikitabConfig.ts`](../../../../src/prototypes/wikitab/data/wikitabConfig.ts).

- Storage key: `wikitab-config-v1` (bump the suffix on breaking shape changes)
- API: `loadWikitabConfig()`, `saveWikitabConfig()`, `patchWikitabConfig()`
- Each field is normalized on read and write (unknown section ids dropped, etc.)

**Grow one field at a time.** Add a property to `WikitabConfig`, a default in
`DEFAULT_WIKITAB_CONFIG`, and a line in `normalizeConfig`. Do not pre-build a
wikita-lite-style mega schema — the old prototype's 772-line `urlStateSchema.ts`
is the anti-pattern.

Current fields:

- `pinnedSectionIds` — most recently pinned first
- `hiddenSectionIds` — section ids hidden from the home feed and skipped for
fetching (`useWikitabHiddenSections.ts`)
- `hiddenArticleTitleKeys` — normalized article titles hidden from Trending on
the home feed (`useWikitabHiddenArticles.ts`)
- `dismissedActivityRevids` — Activity-tab revision ids permanently dismissed
via the card ellipsis menu (`useWikitabDismissedActivity.ts`)

## Cache-only feed storage (`wikitab-feed-cache-v*`)

[`data/feedCache.ts`](../../../../src/prototypes/wikitab/data/feedCache.ts) caches
the full daily feed — all six sections (Trending, In the news, Did you know,
Active discussions, On this day, Birthdays) — under a UTC-day key. Nothing here
is authoritative — clearing it must only ever cost one refetch.

A new-tab page opens dozens of times a day; caching the daily feed is both fast
and good API etiquette. Writing today's entry evicts older days.

**Active discussions TTL** — the discussions slice carries
`sliceFetchedAt.discussions` (epoch ms). `readCachedSectionSlice('discussions')`
and `readCachedFeed()` treat the slice as a miss after **5 minutes**
(`DISCUSSIONS_TTL_MS`). Other slices remain on the UTC-day key. Legacy entries
without a timestamp are treated as stale. `persistPartialFeed()` stamps the time
when a non-empty discussions slice lands.

**Ordered home load** (`index.vue` → `refreshHomeModulesInOrder` →
`useWikitabFeed.loadSection`) reads and writes through the same cache:

- `prepareForOrderedLoad()` hydrates `feed.value` from `readCachedFeed()` when
the day key hits, marking cached sections as already fetched via
`readCachedSectionSlice()` (so stale discussions are not marked fetched).
- Each `loadSection` call reads its slice via `fetchWikitabSectionFeed` (cache
before network) and patches localStorage via `persistPartialFeed()` after each
non-empty slice lands. Empty slices are not cached so a later open can retry.
- `feed/featured` is deduped in-memory per UTC day when Trending, News, and DYK
load separately on a cache miss (`getFeaturedPayload` in
`fetchDailyFeed.ts`).
- `fetchDailyFeedProgressive()` refetches discussions only when the rest of the
day cache hits but discussions exceeded the TTL.

Skip caching when Trending is still empty (early UTC) so the next tab open can
retry. `?nocache=1` bypasses reads and writes.

**DYK / In the news** — both are "current day only" in the Wikifeeds API. DYK
normally updates once at ~00:00 UTC; enwiki can switch to twice daily (~00:00 and
~12:00 UTC) during nomination backlog. UTC-day cache is sufficient for normal
days; no separate TTL unless parity with the midday rotation is needed later.

## Cache-only Daily reads storage (`wikitab-daily-reads-cache-v*`)

[`data/dailyReadsCache.ts`](../../../../src/prototypes/wikitab/data/dailyReadsCache.ts)
caches the loaded card list plus `hasMore` under `{ day, savedFingerprint }`.
Refetch only when that key misses (saved pages changed, UTC day rolled, or first
visit) and a Daily reads render is triggered via `refreshHomeSavedModules()` —
not on every save during the session. Only the first batch loads on refresh;
additional cards fetch on Show more. Same `?nocache=1` bypass as the feed cache.

## Cache-only Suggested edits storage (`wikitab-suggested-edits-cache-v*`)

[`data/suggestedEditsCache.ts`](../../../../src/prototypes/wikitab/data/suggestedEditsCache.ts)
mirrors Daily reads: `{ day, savedFingerprint, items, hasMore }`. Same refresh
cadence via `refreshHomeSavedModules()` and the Saved-module snapshot. Resumable
partial loads — `hasMore: true` lets `loadMore()` recreate the Contribute feed
with `seenPageidsFromCards()` so cached cards are not duplicated.

## Transient component state

Revealed page counts (`useSectionReveal`: `reserved` / `ready`) stay in memory
only. A new tab opens fresh every time; persisting scroll/reveal depth would add
complexity with little benefit.

## URL

Wikitab does **not** use the URL for user preferences. A browser new-tab URL is
fixed — pin state would never survive between opens if it lived in query params.

The sole Wikitab-specific URL escape hatch is **`?nocache=1`**, read inline in
`feedCache.ts` to force a feed refetch when developing against the loading
contract.

ProtoWiki-global params (`?theme=`, `?skin=`) are unrelated — they are resolved
onto `<html>` at boot by [`src/theme.ts`](../../../../src/theme.ts) and
[`protowiki-skins`](../protowiki-skins/SKILL.md).

## Legacy migration

On first load, if stored config has empty `pinnedSectionIds` and the URL still
carries `?pinned=trending,dyk`, those ids are imported into config and the param
is stripped via `history.replaceState`.

## Cross-tab sync

`useWikitabPinned.ts`, `useWikitabHiddenArticles.ts`, and
`useWikitabDismissedActivity.ts` listen for the `storage` event on
`WIKITAB_CONFIG_STORAGE_KEY` so pin / hide / dismiss changes in one tab update
open tabs.
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ trailing **Inside ProtoWiki** section.
| [`protowiki-theme`](.agents/skills/protowiki-theme/SKILL.md) | Light / dark theming; per-component theme overrides |
| [`protowiki-deploy`](.agents/skills/protowiki-deploy/SKILL.md) | GitHub Pages deploy, PR previews, base path, fork setup, SPA 404 |
| [`protowiki-update-codex`](.agents/skills/protowiki-update-codex/SKILL.md) | Upgrading Codex: bump packages, diff upstream docs, sync skills + tokens |
| [`protowiki-wikitab`](.agents/skills/protowiki-wikitab/SKILL.md) | Wikitab new-tab page: section registry, no-jump loading contract, reveal-more paging |

### Codex (design system)

Expand Down
5 changes: 4 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="%BASE_URL%images/ProtoWiki.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, viewport-fit=cover"
/>
<title>ProtoWiki</title>
</head>
<body>
Expand Down
Loading
Loading