M2 — Culture: word of the day and festivals
Status: agreed · Last session: 2026-09-29
Sources: requirements.md M2 · decisions.md D3 (Nepali word of the day), A10 (content drafted, then founder-approved), P31 / P34 (experiences are ordinary stops and suggestions) · M1 day plan card · M3 place page card · M13 maps card.
Scope
M2 in requirements.md has four parts. Two are already covered:
- Place story and "why it matters" — the place page (M3, done 29 Sep).
- Cultural experiences as stops (dance-dinner, cooking class) — ordinary stops today; NepWalk suggests, travellers choose and pay (P31, P34). Nothing to build.
This card covers the other two: a Nepali word of the day and festivals on the trip dates.
Who and the job
- Traveller: "Teach me one useful word today" and "is anything special happening while I'm here?"
- Group leader: sees "your trip falls in Tihar" before the group arrives, and can plan around closures and crowds.
- Founder / team: keeps the words and festival dates right, without a developer once the admin screen exists (later).
Value
Light fun that makes the plan feel like Nepal, not a generic planner — the difference NepWalk promises (vision, D3). A word a day is something a traveller uses (a "Dhanyabad" to the driver); a festival line turns a date into a reason to be excited, and the overview line is the easiest "wow" when the leader shares the link.
Placement — and why
| Element | Mobile | Tablet / web | Why |
|---|---|---|---|
| Word of the day | One line at the top of the day, under tonight's stay: 🗣 Dhanyabad — thank you ›; tap opens the full card |
Same for now; moves to the right column when M13 builds it | Seen first thing every morning, costs one line |
| Festival on the day | One line under the word: main day 🪔 Tihar · Laxmi Puja today — …›; other days inside a long festival 🪔 Dashain season (day 6 of 15) |
Same | On the day itself, where it matters |
| Festivals during your trip | A short list at the top of the trip, above the day list: 🪔 Tihar · 7–11 Nov |
Same | Seen before arrival; what the leader shows the group |
Wireframe
Day plan (mobile)
┌──────────────────────────────┐
│ Day 3 · Kathmandu · Sun 8 Nov│
│ 🌙 Tonight: Hotel Shanker │
│ 🗣 Om mani padme hum › │ ← tap to open
│ 🪔 Tihar · Laxmi Puja today › │
│ ┌──────────────────────────┐ │
│ │ stop cards … │ │
└──────────────────────────────┘
Word card (opened)
┌──────────────────────────────┐
│ 🗣 WORD OF THE DAY │
│ Dhanyabad (dhun-ya-baad) │
│ धन्यवाद │
│ Thank you │
│ Use it: after a meal, a ride,│
│ any help. Locals smile when │
│ you try. │
└──────────────────────────────┘
Trip top (above the day list)
┌──────────────────────────────┐
│ FESTIVALS DURING YOUR TRIP │
│ 🪔 Tihar · 7–11 Nov │
│ 🪔 Chhath · 15 Nov │
└──────────────────────────────┘
States
- No festival on the trip dates: the "Festivals during your trip" block and the day lines are left out (never "No festivals").
- Trip without real dates (a Paila, or no start date yet): no festivals; words still show (they follow day numbers, not dates).
- Festival dates not entered for that year yet: treated as no festival — never a guess.
- Long word or tip: wraps; the collapsed line shows the word and meaning only.
- Loading / error: the lines are left out; the day plan never waits for culture data.
Rules and edge cases
Word of the day (decided 29 Sep):
- A path of everyday words, the same order on every trip (hello → thank you → how much? → …).
- A day whose stops include a place with its own word shows that word instead (e.g. Boudhanath → "Om mani padme hum").
- The path word that was replaced moves to the next day; the path never skips a word. On a short trip with many place words, the last path words simply don't come up.
- Two places with words on one day → the first stop in the day's order wins; the other place word is not shown that day.
- Each word: romanised word, how to say it, Nepali script, meaning, one "Use it" line. No audio (later).
- Words follow day numbers, so they work on Pailas and trips without dates.
- One library for every trip — nothing is stored per trip or per day; the backend works out a trip's words from the library each time it is read. A new trip needs no word work; a correction reaches every trip, including shared ones.
- The path has ~30 words. A trip longer than the path shows no path word after it runs out (never repeats).
- The last day of a trip (2+ days) shows a farewell phrase from a small farewell set, instead of the path or place word — every storyline ends with a goodbye. The phrase is picked from the trip's id, so a trip always shows the same one and different trips get different ones. A one-day trip shows its path word.
Festivals (decided 29 Sep):
- Only traveller-visible festivals (~12–15 a year): ones a visitor will see or feel. No civic days, no daily vratas.
- Each festival: name, first and last date, main days with their own names (Laxmi Puja, Bhai Tika), a one-line "what you'll see", the year.
- A trip shows a festival when any trip day falls between its first and last date. Main day → the named line; other days → "
season (day N of M)". - Dates are entered by hand from Hamro Patro (reference), until the MVP and for this Nepali year. No scraping or feed into the product: Hamro Patro's terms forbid commercial use without written approval.
Both:
- Content is founder-approved before it shows (A10): data files are reviewed in the PR, like
place-library.ts. - Not private: anyone who can read the trip sees its culture block (same read rule as the trip, S1).
- Business logic in the backend (nepwalk-fe CLAUDE.md): the backend picks the word per day and the festivals per trip; the frontend only draws them.
Decided
- Word of the day: path + place words, replaced path word moves to the next day, first place wins (29 Sep).
- One word library for every trip; ~30 path words, none after the path runs out; the last day shows a farewell phrase from a set, stable per trip (29 Sep).
- Word card: word · how to say · script · meaning · "Use it" (29 Sep).
- Placement: one expandable line at the top of the day; right column with M13 (29 Sep).
- Festival dates: hand-entered table from Hamro Patro for the MVP and this year (29 Sep).
- Festival list: traveller-visible only (29 Sep).
- Festivals show on the day and as "Festivals during your trip" at the top (29 Sep).
- Storage: backend data files now (
culture/data/words.ts,culture/data/festivals.ts), no database change, no admin screen. Words and festivals will move to the database with an admin screen later — the API shape below stays the same, so the frontend doesn't change when they move (29 Sep).
TBD
- Calendar source from next Nepali year (2084): ask Hamro Patro in writing for an API / partner deal, or find an official or open source, or compute. Decide before entering 2084 dates; to record as an open item in
decisions.mdat the Wed 30 Sep plan revisit.
API shape
GET /trips/:id/culture — same read rule as the trip (canViewTrip, S1); the share link (M5) reuses it.
{
"days": [
{ "dayNumber": 3,
"word": { "word": "Om mani padme hum", "say": "om mah-nee pad-may hoom", "script": "ॐ मणि पद्मे हुँ",
"meaning": "The jewel in the lotus", "useIt": "…", "source": "place" },
"festival": { "name": "Tihar", "dayName": "Laxmi Puja", "line": "…", "dayOfFestival": 2, "festivalDays": 5 } }
],
"festivals": [ { "name": "Tihar", "firstDate": "2026-11-07", "lastDate": "2026-11-11", "line": "…" } ]
}
source is path, place or farewell. festival is null on days with none.
Draft content (founder to approve in the PR)
Path words (order = the path; 30 words):
| # | Word · say | Script | Meaning | Use it |
|---|---|---|---|---|
| 1 | Namaste · nuh-muh-stay | नमस्ते | Hello / goodbye | Palms together, to anyone, any time of day. |
| 2 | Dhanyabad · dhun-ya-baad | धन्यवाद | Thank you | After a meal, a ride, any help. Locals smile when you try. |
| 3 | Mitho chha · mee-toh chha | मिठो छ | It's tasty | Say it to whoever cooked your dal bhat. |
| 4 | Kati ho? · kuh-tee ho | कति हो? | How much is it? | In shops and markets, before you buy. |
| 5 | Pugyo · poo-gyo | पुग्यो | Enough, thank you | When your host keeps refilling your plate. |
| 6 | Dai / Didi · dai / dee-dee | दाइ / दिदी | Elder brother / sister | The polite way to call a man / woman — driver, waiter, shopkeeper. |
| 7 | Chiya · chee-ya | चिया | Tea | Milk tea with spices, offered everywhere. Say yes. |
| 8 | Ramro · raam-ro | राम्रो | Good, beautiful | "Ramro chha!" at a view, a dish, a photo. |
| 9 | Bistarai · bis-taa-rai | बिस्तारै | Slowly | "Bistarai, bistarai" — on hills, stairs, and to fast drivers. |
| 10 | Pani · paa-nee | पानी | Water | Ask for "umaaleko pani" (boiled water) if unsure. |
| 11 | Maaf garnus · maaf gar-noos | माफ गर्नुहोस् | Excuse me / sorry | To pass in a crowd or after a bump. |
| 12 | Kasto chha? · kuss-toh chha | कस्तो छ? | How are you? | A friendly opener with anyone. |
| 13 | Sanchai chha · sun-chai chha | सन्चै छ | I'm well | The answer to "Kasto chha?". |
| 14 | Thik chha · teek chha | ठीक छ | It's okay / fine | Agreeing, or "no problem". |
| 15 | Ho / Hoina · ho / ho-i-na | हो / होइन | Yes / no | The two words you'll use most. |
| 16 | Chaidaina · chai-dai-na | चाहिँदैन | I don't need it | A polite, firm no to street sellers. |
| 17 | Kaha? · ka-haan | कहाँ? | Where? | "Toilet kaha chha?" — where is the toilet? |
| 18 | Mero naam … ho · may-ro naam … ho | मेरो नाम … हो | My name is … | Introduce yourself; people will ask. |
| 19 | Tapai · ta-pai | तपाईं | You (polite) | Use it with anyone older or new to you. |
| 20 | Bhok lagyo · bhok la-gyo | भोक लाग्यो | I'm hungry | Your guide will know what to do. |
| 21 | Piro · pee-ro | पिरो | Spicy | "Ali piro" = a little spicy; "piro nahalnus" = no chilli, please. |
| 22 | Ek chhin · ek chhin | एक छिन | One moment | "Ek chhin!" — wait a second. |
| 23 | Sasto · sus-toe | सस्तो | Cheap | "Ali sasto garnus?" — a bit cheaper, please? Bargain with a smile. |
| 24 | Himal · hee-maal | हिमाल | Snow mountain | Point at the peaks: "Himal ramro chha!" |
| 25 | Saathi · saa-thee | साथी | Friend | What your driver and guide become by the end. |
| 26 | Jaam! · jaam | जाम | Let's go! | Rally the group in the morning. |
| 27 | Ramailo · ra-mai-lo | रमाइलो | Fun | "Dherai ramailo bhayo" — it was so much fun. |
| 28 | Dal bhat · daal bhaat | दाल भात | Lentils and rice | The national meal. "Dal bhat power, 24 hour!" |
| 29 | Shubha prabhat · shu-bha pra-bhaat | शुभ प्रभात | Good morning | A bright start with your hotel staff. |
| 30 | Maya · maa-ya | माया | Love, affection | What Nepalis say they give their guests. |
Farewell set (last day; one per trip, picked from the trip's id):
| Word · say | Script | Meaning | Use it |
|---|---|---|---|
| Pheri bhetaunla · feh-ree bhay-taun-la | फेरि भेटौँला | See you again | Your goodbye to the people who made the trip. |
| Bhetera khusi lagyo · bhay-tay-ra khu-shee la-gyo | भेटेर खुसी लाग्यो | Happy to have met you | To your driver, guide and hosts. |
| Pheri aaunu hola · feh-ree aau-noo ho-la | फेरि आउनु होला | Please come again | You'll hear it from your hosts. Answer "Aaunchhu!" — I will. |
| Shubha yatra · shu-bha yaa-tra | शुभ यात्रा | Have a good journey | What people wish you as you leave; say it back to fellow travellers. |
| Dherai dhanyabad · de-rai dhun-ya-baad | धेरै धन्यवाद | Thank you very much | The last thing to say before the airport. |
Place words (keyed by library place id):
| Place | Word · say | Script | Meaning | Use it |
|---|---|---|---|---|
boudhanath-stupa |
Om mani padme hum · om mah-nee pad-may hoom | ॐ मणि पद्मे हुँ | The jewel in the lotus | The mantra on every prayer wheel. Walk clockwise and listen for it. |
swayambhunath |
Chaitya · chai-tya | चैत्य | Stupa / shrine | The small stupas around the hill are all chaityas. |
pashupatinath-temple |
Aarati · aa-ruh-tee | आरती | Evening prayer with lamps | Stay for the riverside aarati at dusk. |
bhaktapur-durbar-square |
Juju dhau · joo-joo dhau | जुजु धौ | King of curds | Bhaktapur's famous yoghurt, served in clay pots. Try one. |
chitwan-national-park |
Gainda · gain-da | गैंडा | Rhino | What everyone hopes to see from the jeep. |
Festivals, Oct 2026 – Apr 2027 (dates from Hamro Patro, checked 29 Sep; New Year 2084 and Buddha Jayanti 2027 are not published yet — add when they are):
| Festival | Dates | Main days | What you'll see |
|---|---|---|---|
| Dashain | 11–25 Oct 2026 | Ghatasthapana 11 Oct · Fulpati 17 Oct · Maha Ashtami 18 Oct · Maha Nawami 20 Oct · Bijaya Dashami 21 Oct | Nepal's biggest festival: families gather, elders give red tika, kites fill the sky; many shops and offices close. |
| Tihar | 7–11 Nov 2026 | Kag Tihar 7 Nov · Kukur Tihar + Laxmi Puja 8 Nov · Gai Puja 9 Nov · Gobardhan Puja / Mha Puja 10 Nov · Bhai Tika 11 Nov | Festival of lights: oil lamps and marigolds on every house, garlanded dogs, children singing Deusi door to door. |
| Chhath | 15 Nov 2026 | Chhath 15 Nov | Offerings to the setting and rising sun at rivers and ponds, strongest in the Terai. |
| Yomari Punhi | 24 Dec 2026 | Yomari Punhi 24 Dec | Newar harvest festival: sweet steamed yomari dumplings in Kathmandu valley homes. |
| Christmas | 25 Dec 2026 | Christmas Day 25 Dec | A public holiday; churches in Kathmandu hold services and carols. |
| Tamu Lhosar | 30 Dec 2026 | Tamu Lhosar 30 Dec | Gurung New Year: dances and traditional dress, big in Pokhara. |
| Maghe Sankranti | 15 Jan 2027 | Maghe Sankranti 15 Jan | Winter's end: sesame sweets, ghee and yam, holy dips in rivers. |
| Sonam Lhosar | 7 Feb 2027 | Sonam Lhosar 7 Feb | Tamang New Year: music, dance and gatherings around Boudha and the hills. |
| Basanta Panchami | 11 Feb 2027 | Saraswati Puja 11 Feb | Spring and the goddess of learning: students crowd Saraswati shrines, children write their first letters. |
| Maha Shivaratri | 6 Mar 2027 | Maha Shivaratri 6 Mar | Thousands of pilgrims and sadhus at Pashupatinath; bonfires at night. Expect big crowds there. |
| Gyalpo Lhosar | 9 Mar 2027 | Gyalpo Lhosar 9 Mar | Sherpa / Tibetan New Year: butter lamps and prayer flags at Boudhanath. |
| Holi | 21–22 Mar 2027 | Holi (hills) 21 Mar · Holi (Terai) 22 Mar | Festival of colours: water balloons and coloured powder in the streets — wear clothes you can lose. |
| Ghode Jatra | 6 Apr 2027 | Ghode Jatra 6 Apr | Horse parade and army display at Tundikhel, Kathmandu. |
Backlog (after launch)
- Words and festivals in the database with an admin screen (see Decided).
- Audio for each word.
- "Closed today" warnings per festival (sights and shops).
- More place words as the library grows.
Tasks
Build day: set at the Wed 30 Sep cut-line (M2 is first on the cut list).
[be]Data filesculture/data/words.ts(path, place and farewell words) andculture/data/festivals.ts(the table above) — founder reviews the content in the PR. Pure rules, unit-tested:wordsForTrip(tripId, days)(path, place word first, moved path word, first place wins, no word after the path runs out, farewell on the last day picked stably from the trip id) andfestivalsForTrip(startDate, dayCount)(overlap, main day vs season line, no dates → none).[be]GET /trips/:id/culture— same read rule as the trip (canViewTrip); e2e for anonymous / outsider / insider on a private and a public trip, and a trip with no dates.[fe]Day plan: word line (expandable card) and festival line under tonight's stay; left out on loading / error.[fe]"Festivals during your trip" block at the top of the trip; left out when empty.