Day by day
What happened here
What was made here, who came, what worked. Written by the people who were there.
⛔⛔ Two rulings rebuilt this page after it was first drawn, and both
DELETED work. ⭐ The unit is an ACTIVITY, not a day — several can share a date —
and ⭐ there are no future entries at all. Activities are a record of what happened.
⭐⭐ The source already proves the first ruling. August 7's block in the
guide contains two different things — a stitching session and the cats — run
together under one date heading because the container had no room for a second entry.
The owner was describing something the corpus was already doing.
⭐ And multiple entries per date makes the headline inversion load-bearing
rather than merely better. “Saturday 4 July” cannot headline three different
things; each activity keeps its own.
⛔⛔ The date was a group label until 10 Aug and is now a field on each card — the
grouping did not survive the move to three columns, and the reason is measured in the note
under June. ⚠️ Repeating the date on three sibling cards is the cost, and it is the right
cost: each of these is a shareable URL that will arrive somewhere with no neighbours
to inherit a heading from.
⛔ The months are a selector, not a filter, and March is not in it —
the March guide covers five days and carries no activity lines at all. An empty month in
a jump list is a dead end that looks like a bug.
⛔⛔ A club label was added above every headline and removed four minutes
later — and the part worth keeping is what happened in between. The owner read the
first headlines and found them incomplete: “moved in where? who pulled out the DNA?
which dance?” He was right. A label was proposed to carry the who.
⭐⭐ He then ruled the label out — and the completeness stayed, because it had
been fixed in the HEADLINES rather than propped up by something above them.
“The cats have moved into the garden”, “The stitching team's bags
went on sale at Local Sustainable Living”, “The dance group talked
about their first performance, in the Main Hall”. ⛔ Removing the label must
not take the completeness with it, or we are back at his original complaint with an extra
round trip.
⭐ Checking that found two that did NOT survive. “Up-cycling in the
lab” and “The group talked about…” both leaned on the label above them and read
as fragments without it. Rewritten. ⚠️ That is the real cost of a decorative
element: things quietly start depending on it, and the dependency only shows when it
is taken away.
⭐ The feed is back to headline + date and nothing above — which is closer
to what was measured on Airbnb in the first place: their dated record has no kicker
either.
⚠️ What he wants instead is a different thing, later: Ghost tags for
categories — Education (science), Livelihood (stitching) — a layer above the
club, added by the team, not the import, and shown on the entry page
only. ⛔ So do not design filtering on it: a category that appears only on the
entry page cannot be browsed by.
⭐ PROPOSAL, not ruled — have the importer capture the club as an internal tag
anyway (#club-stitching). It is derivable from the schedule prefix the
importer already strips, so keeping it costs one line and recovering it later means
re-parsing 150 guides. ⛔ It displays nothing, it is not the category he described,
and it commits nobody to anything — it only means the answer still exists when somebody
asks.
⭐ Months are a selector, not a filter. Nobody browsing a record wants to
filter it; they want to jump. May pulls 282 six-month visitors, so the months carry
real traffic.
August
-
The cats have moved into the garden
Our little cat friends continue to make themselves at home. As a pet-friendly space we are exploring small ways to make it more welcoming for animals.
Friday 7 August
-
The stitching team's bags went on sale at Local Sustainable Living
A chance to see how the products are received. If demand grows, the team plans to make more.
Thursday 6 August
-
The stitching team started five new bag designs for Onam
Made with handloom fabric and cut pieces, for an Onam event by Local Sustainable Living.
Tuesday 4 August
July
-
Children began using the new Reading Corner
The reading programme follows an approach adapted from ASER and Teaching at the Right Level, built on each child's current ability rather than age.
Saturday 4 July
-
The community dance class practised together again
Participants practising together and building confidence through regular learning and teamwork.
Saturday 4 July
-
Chapter leaders met for a quarterly district meeting
Leaders from across cities presented updates, discussed challenges and planned what comes next.
Saturday 4 July
-
Every child took home a fruit seed to grow
Water it, watch it, come back and report. The team tracks the progress with them, so the learning comes from their own observations.
Saturday 11 July
-
Children read together and with volunteers on the verandah
The session encouraged regular reading and helped children become more comfortable with books.
Saturday 11 July
June
-
The stitching group split by skill level so members could teach each other
Beginners alongside experienced members who can support them. The group also worked out roles for an upcoming bag order.
Monday 1 June
-
An afternoon of sorting fabric and talking about what it could become
A relaxed session of teamwork and shared learning, preparing materials and practising together.
Tuesday 2 June
-
One-to-one guidance at the machines
Basic techniques, machine handling, and confidence built through regular practice.
Wednesday 3 June
⛔⛔ THE DAYBAND IS GONE, and the record killed it — not a preference.
The owner asked for three columns here as well. The obvious way to keep both was a
full-width date heading with that day's activities gridded beneath it. Measured against
all six monthly guides — 157 days, 250 activities, March 27 to August 30 — that
option does not survive:
⛔ 92 of 157 days (59%) have no photographed activity at all, so they never
appear in a photo-only feed. A dayband claims a day-by-day record this page no longer
is.
⛔ Of the 65 days that DO appear, 45 (69%) contribute exactly one card — a
full-width heading over one card and two empty cells, two times in three, all the way down.
⭐ And the owner already ruled the day is not the unit — “there could be more
than one activity entry per day”. The dayband was a holdover from the single column;
it contradicts a decision already made.
⭐⭐ So the date lives on the card, where it is already, and the month stays as
the heading. A month heading is honest about being a container of a selection; a
day heading is not. Nothing new was added to _kit.css — this page now uses
the homepage's grid component unchanged.
⚠️ The repeated date survives and is deliberate. Three cards read
Saturday 4 July above — that is what that Saturday was. ⭐ Only 14 of 65 days
contribute more than one card, so this is the uncommon case, not the page. ⛔ Suppressing
the repeat would leave a card that cannot be read on its own, and every one of these is a
shareable URL that will arrive somewhere with no neighbours.
⭐ What makes the grid work here is the same thing that made it work on the
homepage: the excerpt. Measured — 100 of the 109 photographed activities carry real
prose (median 248 characters). Nine do not, and those are the pre-filled schedule
lines. ⚠️ Those nine will render as a headline and a date in a cell sized for more —
acceptable at 8%. ⛔ A reason to order the FEED by fullness, never to leave an entry
out: the import takes all 250 and display is a query.
The quiet state — designed first
Nothing written since Tuesday
The clubs still run every afternoon, 2–6 PM. See the week.
⭐ Designed before the good state, as “Coming up” was — but as an
EXCEPTION, because the habit is measured: June carries 29 written days of 30,
July 23 of 31. ⛔ Quiet stretches are not the norm here.
⛔ It names the gap and hands over something true. “Nothing written since
Tuesday” is honest and dated; ⛔ never “no recent activity”, which reads as
the room is dead when the room is open and full.
⚠️ Still unanswered and not a design question: who writes these, and what
happens when that person is away.
⚠️ Reviewer notes — not page copy
⛔⛔ 1. This page was outside the design system for an hour
Its component lived in a <style> block inside the page — so the
responsive rules, the measure caps, the kitnote cap and the li exception
list, all of which live in _kit.css, reached every kit except this
one.
⭐⭐ And the part nobody spotted: assertion 13 could never have caught anything
here, because the check knows classes and this page was built from classes the
system had never seen. A page outside the system passes the system's checks by being
invisible to them. ⛔ A clean measurement would have been meaningless and would
have read as a pass — the "gate that cannot fail" pattern arriving through a door
nobody had shut. Moved into _kit.css.
⛔ 2. Every entry has its own URL, and it is nested
Owner ruled: /activities/{slug}/, not root-level. ⭐ The second
URL shape this project has chosen rather than inherited. At ~30 entries a month,
deciding this a year from now means redirecting ~360 URLs; deciding it today costs a
routes.yaml collection. ⚠️ Which is the Ghost Settings wall — a human in
admin, not a script — and joins the paste-in package already pending.
⛔ The individual entry page does not exist as a kit and is now the gap.
⭐ Shareability is its primary requirement, not a property it happens to have:
direct traffic is 60.8% — 5,449 visitors — against 20.7% search. This is already
a shared-link site whose pages contain nothing shareable. A heading inside a
12,628px guide cannot be sent to anybody. So the entry page is designed for the
moment it arrives in a WhatsApp thread, which makes og:image,
og:title and the description product decisions, not metadata
hygiene.
⚠️ The floor is adequate and should be stated as such: every post already has
og_image, og_title, og_description,
meta_* and canonical_url fields — all currently empty, so
Ghost falls back to the title and feature image. ⛔ That fallback is fine. Nobody is
blocked on hand-writing 360 descriptions; a hand-written one earns its keep only
where the headline alone would mislead.
⚠️ 3. The photographs now carry width and height — a defect I had already solved
All three lacked both attributes, so the feed reflowed as each image arrived —
content jumping under a reader's thumb, on the page whose whole purpose is scrolling.
⛔ I got this right on /team/ one page earlier — “width/height on
every one so the grid does not reflow as thirteen images arrive” — and did not carry
it here. ⚠️ These are unresized WhatsApp originals, the worst case for it.
⚠️ 4. What the import must guarantee — not mine to build
The monthly guides stay, and the duplicate-content worry does not apply: ⭐ a
past record cannot drift. “On 7 August we finished fourteen bags” is true forever.
The one real cost is Google splitting signals, solved by setting each entry's
canonical_url to the guide it came from.
⛔⛔ CORRECTED 10 Aug — March and April DO have day headings, in a different
tag. This note previously said they had none. They use h3 where
May onward uses h2, and a parser keyed on h2 finds
zero days in them and exits clean. ⭐ April holds 30 days, 41 activities and 30
photographed ones — the second-best-photographed month in the corpus — and it is
precisely the month a working script would silently drop. ⚠️ “No day headings” and
“day headings I did not look for” produce the identical output; only reading the
markup separates them. Accept both tags, and assert a per-month day count.
⛔ Two more will bite the splitter:
Matching each photograph to the right day is the fuzzy-match
trap in a new place, and unlike a redirect map a wrong answer here is invisible.
And ⛔ the newsletter: 796 subscribers. Seven posts on this site already have
status sent — prove, do not assume, that API-created posts do not
send. A hundred creations with the wrong flag is a hundred emails.
⚠️ Newsletter is publish-only by an existing team habit, not by a setting — Ghost's default is the other way, so the next person to join needs to know it is a habit that can be broken by accident.
⛔⛔ 4b. THE MOCKUP COMMITTED THE EXACT ERROR NOTE 4 WARNS ABOUT
Note 4 says “matching each photograph to the right day is the fuzzy-match trap in a new place, and unlike a redirect map a wrong answer here is invisible.” ⛔⛔ Three cards on this page and four on the homepage carried the WRONG photograph — the images were shifted one place against their headlines. A dance rehearsal sat under “Chapter leaders met for a quarterly district meeting”, and children sitting at a science session sat under “The community dance class practised together again”.
⭐ It was found by looking at the rendered page, not by any check. Every photograph loaded, every card measured correctly, every date was right. ⚠️ A wrong picture is a well-formed page.
⛔⛔ RETRACTED, and the retraction is the more useful half. This note said “4 July's five real activities are…none of them is stitching…that entry did not happen that day.” It did. 4 July has SIX activities and one of them is the Stitching Lab, 2–6 PM, Mary Gracy — “The stitching team continued working on new products while improving quality and exploring better production techniques.”
⭐⭐ The reason I could not see it is the whole lesson: the stitching paragraph is the only one of the six with NO photograph after it. I enumerated the day from a photo-filtered extraction and then stated a fact about the day. ⛔ I read “absent from my filtered view” as “did not occur” — and the filter was the very thing under test.
⛔ This is my own rule from the homepage notes, broken by me: “out of view, not out of existence.” ⚠️ And it matters at scale, not just here: 141 of the corpus's 250 activities have no photograph. 56%. Any rule that treats an unphotographed entry as doubtful doubts the majority of the record. ⭐ The replacement card stands on its own merits — Monday 6 July, a real 6 July photograph — so no page is wrong; only this note was.
⛔⛔ 4c. AND THE SOURCE ITSELF MISPAIRS. Verified by rendering all twelve photographs on one page and reading the headline under each. The 6 July stitching entry's picture — placed by the guide, correct by DOM order, correct by day — is a person dragging a cut branch of she-oak foliage along a paved lane. ⛔ Not fabric. Not stitching. Not indoors. Card removed rather than given an invented headline.
⭐⭐ So “the photograph follows the paragraph” is a rule about the DOCUMENT, not about reality. ⛔⛔ A pairing audit built from the guides can only prove conformance to the guides — a source-level mispairing is invisible to it and audits as correct. The only instrument that finds these is a person looking at the picture beside the headline.
⚠️ Three softer cases in the same sweep, all kept: the bags-on-sale entry shows someone sewing rather than bags on a shop shelf; the Reading Corner entry shows the science session it shares a paragraph with; the fruit-seed entry shows the room, no seeds. ⭐ Each is a picture from that activity's session rather than of the thing the headline names — acceptable for a record, and worth knowing the corpus is like this. ⛔ The hard failure is the one where the picture is of a different activity entirely.
⭐ Two things the full 4 July block shows that the filtered one could not. The district meet-up entry contains a participant quotation — “The home-like feeling. Jasentha Chechi who cooked us breakfast at short notice…” — so testimonials live inside the activity guides, not only in posts, which widens the testimonial inventory. And a non-paragraph element can sit between an activity and its photograph, so the DOM-order rule must skip blockquotes rather than reset on them.
⭐⭐ For the importer this raises the bar on note 4: the pairing must come from DOM order inside the day block — each photograph belongs to the activity paragraph it follows — and the result must be spot-checked by a human against the pictures. ⛔ There is no automated check for “this is a photograph of a different thing.” ⚠️ Only the entries with no prose are ambiguous to pair — so those are the ones a human checks first. ⛔ Not a reason to leave them out.
⛔⛔ 5. Every July and August weekday in these mockups was WRONG
Against the real 2026 calendar: 4 July is a Saturday, not a Friday. 7 August is a Friday, 6 August a Thursday, 4 August a Tuesday. Corrected here and on the homepage. ⚠️ The May dates were right, so it was not a uniform slip — a wrong stretch inside a correct list looks like data.
⛔ This is not a layout defect and no layout check could see it. The whole claim of this page is this happened, on this day; naming the wrong weekday is a different statement, not a smaller one. Someone who was in the room on Saturday reads “Friday” and stops believing everything else on the page.
⭐⭐ The source guides carry no weekday at all — they say “July 4”. So
every weekday on this site is computed, and it must be computed in one place, from the
date, at Asia/Kolkata. ⛔ A date rendered in UTC lands on the previous
evening and shifts the weekday back by one — which is this exact error, mechanised and
applied to all 250 entries.
⛔ 6. The no-photo form is out of view, and must not be deleted
The owner ruled the mockups pull only photographed entries for now, so the two exemplars that were on this page are gone from it: 1 August, a rain closure — nobody photographs a shut room, so that one can never have a picture — and 2 August, a dance group meeting that simply was not photographed. ⭐ 92 of 157 days are in the same position.
⛔⛔ The CSS for that form stays in _kit.css and stays documented. The
rule behind it is unchanged and is the reason the grid has no holes: no slot without a
guaranteed filler — an entry with a photograph is a card, an entry without one has no
container at all. The failure to guard against is somebody later reading “we never see
this” as “this cannot happen”, deleting it as dead code, and rediscovering it as an
empty 4:3 well on the day a rain closure ships.
⚠️ The site still has no surface for “something is coming up”, and that is deliberate — future entries were cut. ⛔ It must not creep back in here. The record says what happened, and nothing else.
⚠️ 7. The source has a typo the importer will trip on
July 11 reads Faclilitated by Olimalar Foundation. ⛔ A
schedule-prefix stripper matching Facilitated by exactly will leave that
string in the body of a published entry, where it reads as our error rather than the
source's. ⭐ Match loosely, then assert that no published body still contains a time
range or the word lab-prefixed room name — a check on the output, not on the
pattern.