Stylesheet did not load — you are NOT looking at the design. Check that _kit.css is reachable from this page.

MOCKUPS — none of this is live. Nothing here has been published to aikyam.space. These are proposals for review before anything is changed.

aikyam space · design review · 9 August 2026

Five pages, proposing one change

aikyam space is a room in Fort Kochi that runs three free community clubs. Its website cannot currently tell a neighbour what is on this Saturday. These five pages propose putting the schedule first, and show what the rest of the site looks like once it is.

The five

⚠️ Known gaps — please do not spend your review on these

All of these are already known and none is fixable by design alone. Anything not on this list is fair game.

1. No photographs

Every image is a grey placeholder box at the right aspect ratio. The live site has real photographs of real sessions; none has been copied in.

2. No email address, no phone number, no street address

None is published anywhere on the live site — measured across all 26 pages. Nothing has been invented to fill the hole. Location is a Maps pin only, which is the owner's decision.

3. WhatsApp is a dated placeholder with no number

Ruled in by the owner on 10 Aug 2026. The copy carries no time claim — “soon” was refused because it is the same rot shape as a static schedule: true when written, silently false later, and nothing prompts its replacement. The block is stamped data-placeholder-added="2026-08-10" so a sweep could find it, but no sweep exists — it needs a human.

4. ✅ /membership/ — RESOLVED, unpublish

The live page prices in US dollars — “Free $0”, “Tiny Enterprise $50 /year” — for a Kerala community space. Owner ruled 10 Aug 2026: unpublish, not re-price. It is a routes.yaml template page so it goes through the Ghost admin UI, and it is gone from the nav and from every link in these kits.

5. Nav labels are proposals, not final copy

⛔ Settled 10 Aug 2026: “Residency” is dead — the owner killed it twice and replaced it with “Who we are”, a single page listing the outside NGOs and aikyam's own projects. ⚠️ A live URL moves with it: /change-makers-in-residence/, 95 visitors in six months, recorded in ASTRO-PLAN.md §0b as a decided 301.

“Stories” and “About” remain placeholders for the owner's own words. The old “Co-Impact” label may carry meaning inside aikyam that an outside reader cannot see.

6. Opening hours are derived, not published

The footer's hours come from the club session times, because the space has never published an opening policy. If the room is open outside 2–6 PM, they are wrong and only the owner can say so.

7. Dark mode is undefined

The live site has a working System / Light / Dark selector in its footer, and dark mode really does render. This system is drawn light-only and has no dark values. That is a decision nobody has taken, not an oversight — see the system specimen.

8. The typeface is loaded from Google, not self-hosted

These mockups link Figtree from fonts.googleapis.com so they render correctly on a review server. The system says the production site must self-host it — the live site already opens five third-party origins before any content arrives.

9. ⛔⛔ REVERSED — we ruled in favour of the wrong page

The monthly guide listed “Stitching Lab, 2 PM–6 PM” on Mondays 10, 17 and 24 August; the clubs page said closed on Mondays. The owner ruled the clubs page was right and the guide was wrong. The mockups followed the clubs page.

⛔ The 10 August rewrite says Stitching runs Monday to Saturday. The guide was correct all along, and the page we ruled for was the wrong one. Nobody will walk to a shut room, so the urgent correction this item demanded is moot — but the ruling was overturned silently and nothing announced it.

⭐ The lesson is bigger than the fix. When two sources disagree, “which do we trust?” is a worse question than “why do two exist?” Picking a winner felt like resolution and only recorded a preference — the contradiction survived, and the preference was backwards. One store cannot contradict itself, so there is never a side to pick.

13. ✅ FIXED on the live site — and Science was a rename

Reading and Curiosity were real, active and missing from /clubs/. The 10 August rewrite adds both with published times — Monday to Saturday, 2–6 PM — so the “times not yet published” state they were designed for no longer applies to them. Science Club was renamed to Curiosity Club: same club, not a new one.

⛔ Still open, and now unsourced for every club: whether you can turn up. The rewritten page says nothing about turning up versus writing first, for any of the four. Every value we held was inferred, and the two “write to us first” values were inferred from times that are now published — so re-deriving them would reason from a premise that has gone. All four are recorded as unknown and the pages say nothing.

⚠️ A live-site defect for the owner, not something the mockups paper over: the opening paragraph of /clubs/ still promises “Stitching, Science, Reading, Dance, Cooking, Carpentry, Upcycling, Gardening” while no Science entry exists below it. The word he renamed survives in the first sentence of the page.

14. ⚠️ One person or two — deliberately not guessed

/clubs/ credited Aparna N as a “Tiny Entrepreneur”; the owner has confirmed she is not — she is the writer and a team member, and that label is gone. Still open: whether she facilitates the Dance Club, and whether “Aparna N” and the “Aparna R” byline on a June story are the same person. The Dance credit is left exactly as /clubs/ has it rather than half-corrected.

⛔ 0a. Never lose a URL — the rebuild's one destructive risk

aikyam.space is being rebuilt in Astro, and it has real readers: six months of Plausible shows the homepage at 1,204 visitors, /clubs/ at 328 — the second most-visited page on the site, /about/ 246, /contact-us/ 112, and three monthly guides at 278, 123 and 94.

⛔ Every existing URL either survives or 301s, across all 37 posts and 26 pages, and the map is built once, before cutover — retrofitting it means doing the migration twice. ⚠️ Unpublished is not deleted: the six pages slated for unpublishing need redirects too, and nobody has checked which of them carry inbound links. ⚠️ And if the URL shape changes at all — including any future Malayalam segment — that has to be decided before the map, not after.

⭐ Those 328 visitors to /clubs/ are also independent evidence for the schedule-first decision below. People were already hunting for it while the nav buried it in third place behind a cookie emoji.

⛔⛔ 0b. The frozen week grid rotted TWICE in one day, in two different ways

Every date in these mockups is hand-written. First the dates went stale overnight, exactly as predicted. Then the schedule itself was rewritten on 10 August — the closed day moved from Monday to Sunday, Science became Curiosity, and Reading gained times. Every row was wrong, and in a way nobody was watching for.

⭐ That second failure is the stronger argument, and this note could not have made it yesterday. A frozen grid does not only go stale as the calendar advances — it goes stale when the underlying rule changes, and no amount of re-typing dates defends against that. Only deriving every page from one stored schedule does.

⛔ And the rule’s own shape changed. The four clubs now cover all seven days between them, so there is no day the room is shut and no “except X” sentence can be true. The room line is “Open every day, 2–6 PM” with one exception worth naming — “Sunday is Dance only”. ⭐ Which is better than what it replaces: “except” was discarding the two facts a neighbour actually needs, that Saturday is the fullest day and Sunday is not closed but different. Dates remain a projection, computed when the page is read, never typed and never baked — full constraint in COMPONENTS.md.

Listed first because it is the one gap that could undo the whole redesign at implementation time — and because the live proof is sitting one click away.

10. “Coming up” is empty, and that is the deliverable

There is not one future-dated item anywhere on aikyam.space — /tag/events/ holds only the three monthly guides, /event-status/ renders 28 characters. No event has been invented to fill it. Tink Her Hack 3.0 is a past event and stays in the stories section.

11. “Latest from the clubs” is all Stitching, and that is real

Of the nine days written up in August so far, Stitching is the only club with substantive entries; Curiosity (written up then as Science) has none and Dance has one. No filler row was added to balance it — the imbalance is a writing question the component makes visible.

12. Two facilitator records disagree

✅ Resolved 10 Aug 2026 — see gap 14. /clubs/ was the wrong one. Kept here so the trail is visible rather than tidied away.

How these were checked

Each page was rendered in a real 390 × 844 frame and again at 1280, and measured — not read. Ten assertions run on every page, and each one was verified by injecting its own fault and watching it go red first:

AssertionResult
Figtree actually loadedfingerprint 1143.93px, against 1027.84 for a bogus family name
Green fills ≤ 2 per screen1
Brand green never used as text0 instances
Tap targets ≥ 44px, both axes0 under, measured by hit area with elementFromPoint
No text under 14px0
Exactly one h1, not centredpass
One typeface familyFigtree
No horizontal page overflow0px at 390 and 1280
Reading prose ≥ 19pxpass
⭐ Line length ≤ 65 median / 75 maxpass — added for v2, and it immediately caught two defects in v1
Text column39 characters a line at 390px, 56 at 1280px

Rendering found four defects that reading the CSS would not have: form controls not inheriting the typeface, an invitation set in caption type, a card whose padding cut its line to 31 characters, and a session title whose tap target was 26px until an overlay took the row. All four are fixed and noted in _kit.css.

⭐ The eleventh assertion is the interesting one, because it was missing. It was added while building v2 and immediately failed on components that had already shipped and already been reviewed as clean: .session__body measured 77 characters a line at 1280px, and the story card excerpt 67 — both 16px text inheriting a column sized for 20px body. A gate that does not exist cannot fail, and "it passed" only ever meant "nothing asked". Fixed across every page by capping 16px blocks at 27rem, the value tokens/spacing.css already carried.

⚠️ And the first fault injected to test the new gate measured exactly 65 against a > 65 threshold, so it passed and proved nothing. A self-test that lands on the boundary is not a self-test. The real one measures 140.