Welcome 👋
Neo ships a full calendar component, and its events live in a data store. Neo.calendar.store.Events#getDayRecords(date) answers "which events belong to this day?". Its rule is simple, and a bit surprising: an event counts only when it starts and ends on that day. Pin the rule with a spec. No test covers the calendar's data layer yet.
This is a good first issue for Hacktoberfest 2026. It needs Node.js and a clone of this repository: no Docker, no AI setup.
[!IMPORTANT]
Reserved for first-time Neo.mjs contributors. The maintainer team will not claim, edit, or implement this issue through 2026-10-31. Comment here to claim it, and ask anything on this issue.
Set up once: follow Set up the engine from a clone, including npm run bundle-browser-deps: without it the unit suite selects zero tests.
Where things live
- Source:
src/calendar/store/Events.mjs (getDayRecords(date), sorted by startDate ascending), with its model src/calendar/model/Event.mjs
- New test file:
test/playwright/unit/calendar/EventsStore.spec.mjs (the folder is new)
- Pattern to copy:
test/playwright/unit/data/Store.spec.mjs (creating a store with data)
- Tip:
Neo.create(EventsStore, {data: [{id, title, startDate, endDate}, …]}) with Date objects works directly.
What to cover
| Events in the store |
getDayRecords(<that day>) returns |
| one that starts and ends on the day |
that event |
| two same-day events added late-first |
both, sorted by startDate: the store's sorter orders them |
| one that starts on the day and ends after midnight |
not returned, on either day |
| one on another day |
not returned |
| a day with no events |
[] |
If you think events that span midnight should appear on their days (a month view probably expects that), say so on this issue: that is a behaviour change for its own PR.
Done when
Out of scope
The calendar views, drag-and-drop, and time zones.
While you wait for review
You just pinned one small piece of a multi-threaded application engine: in Neo.mjs your app's code runs inside a web worker, and the main thread only paints. Two things worth ten minutes:
- See the part nobody expects. Run
npm run build-themes -- -n -e dev -t all and npm run server-start, open apps/workstation/, and drag a tab out of the browser window. It becomes its own OS window, still running, with the same component instances and the same worker. Benefits: Introduction explains why that is possible.
- Your coding agent can go much further here. The skills this repository's AI maintainers work with are published on npm as
neo-agent-skills, and they need no Knowledge Base and no Memory Core. With Claude or GPT beside you, the help wanted issues are within reach after this one.
Maintainer notes
Curated under #18985 (Hacktoberfest 2026). Found work: test/playwright/unit/calendar/ does not exist on dev (2026-09-23). Every row was run in the unit environment: a store holding late, early, multi-day and other-day events answered ['early', 'late'] for the day, [] for the multi-day event's end day, and [] for an empty day.
Live latest-open sweep: the latest 20 open issues at 2026-09-23T14:24Z; no equivalent (the getDayRecords title search returns one closed issue). A2A: no claim on this scope. Memory Core: no prior decision.
Origin Session ID: 3be453e4-8b04-4865-be62-4cff34f4e0c6
Welcome 👋
Neo ships a full calendar component, and its events live in a data store.
Neo.calendar.store.Events#getDayRecords(date)answers "which events belong to this day?". Its rule is simple, and a bit surprising: an event counts only when it starts and ends on that day. Pin the rule with a spec. No test covers the calendar's data layer yet.This is a good first issue for Hacktoberfest 2026. It needs Node.js and a clone of this repository: no Docker, no AI setup.
Set up once: follow Set up the engine from a clone, including
npm run bundle-browser-deps: without it the unit suite selects zero tests.Where things live
src/calendar/store/Events.mjs(getDayRecords(date), sorted bystartDateascending), with its modelsrc/calendar/model/Event.mjstest/playwright/unit/calendar/EventsStore.spec.mjs(the folder is new)test/playwright/unit/data/Store.spec.mjs(creating a store withdata)Neo.create(EventsStore, {data: [{id, title, startDate, endDate}, …]})withDateobjects works directly.What to cover
getDayRecords(<that day>)returnsstartDate: the store's sorter orders them[]If you think events that span midnight should appear on their days (a month view probably expects that), say so on this issue: that is a behaviour change for its own PR.
Done when
test/playwright/unit/calendar/EventsStore.spec.mjsexists, following the pattern file's setup.test(...)per table row.npm run test-unit -- test/playwright/unit/calendar/EventsStore.spec.mjspasses.npm run test-unitpasses.Out of scope
The calendar views, drag-and-drop, and time zones.
While you wait for review
You just pinned one small piece of a multi-threaded application engine: in Neo.mjs your app's code runs inside a web worker, and the main thread only paints. Two things worth ten minutes:
npm run build-themes -- -n -e dev -t allandnpm run server-start, openapps/workstation/, and drag a tab out of the browser window. It becomes its own OS window, still running, with the same component instances and the same worker. Benefits: Introduction explains why that is possible.neo-agent-skills, and they need no Knowledge Base and no Memory Core. With Claude or GPT beside you, thehelp wantedissues are within reach after this one.Maintainer notes
Curated under #18985 (Hacktoberfest 2026). Found work:
test/playwright/unit/calendar/does not exist ondev(2026-09-23). Every row was run in the unit environment: a store holding late, early, multi-day and other-day events answered['early', 'late']for the day,[]for the multi-day event's end day, and[]for an empty day. Live latest-open sweep: the latest 20 open issues at 2026-09-23T14:24Z; no equivalent (thegetDayRecordstitle search returns one closed issue). A2A: no claim on this scope. Memory Core: no prior decision.Origin Session ID: 3be453e4-8b04-4865-be62-4cff34f4e0c6