create-popular-site 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/index.mjs +224 -0
  4. package/package.json +39 -0
  5. package/templates/aquarium/popular.config.ts +224 -0
  6. package/templates/aquarium/public/images/hero.png +0 -0
  7. package/templates/aquarium/public/images/logo.png +0 -0
  8. package/templates/aquarium/public/images/organizer-1.png +0 -0
  9. package/templates/aquarium/public/images/organizer-2.png +0 -0
  10. package/templates/aquarium/public/images/organizer-3.png +0 -0
  11. package/templates/aquarium/public/images/post-1.png +0 -0
  12. package/templates/aquarium/public/images/post-2.png +0 -0
  13. package/templates/aquarium/public/images/post-3.png +0 -0
  14. package/templates/aquarium/src/content/authors/nadia.md +13 -0
  15. package/templates/aquarium/src/content/blog/aquarium-field-trip.md +14 -0
  16. package/templates/aquarium/src/content/blog/fresh-vs-salt-recap.md +23 -0
  17. package/templates/aquarium/src/content/blog/new-tank-101-recap.md +14 -0
  18. package/templates/aquarium/src/content/blog/show-and-tell-in-photos.md +21 -0
  19. package/templates/aquarium/src/content/blog/taken-by-the-sea.md +14 -0
  20. package/templates/aquarium/src/content/docs/handbook.mdx +127 -0
  21. package/templates/aquarium/src/content/docs/runbooks.mdx +57 -0
  22. package/templates/aquarium/src/content/events/aquascaping-night.md +15 -0
  23. package/templates/aquarium/src/content/events/fresh-vs-salt.md +14 -0
  24. package/templates/aquarium/src/content/events/new-tank-101.md +14 -0
  25. package/templates/aquarium/src/content/events/shrimp-social-swap.md +14 -0
  26. package/templates/aquarium/src/content/events/vancouver-aquarium-trip.md +14 -0
  27. package/templates/aquarium/src/content/organizers/nadia.md +13 -0
  28. package/templates/aquarium/src/content/organizers/tom.md +13 -0
  29. package/templates/aquarium/src/content/organizers/volunteer.md +13 -0
  30. package/templates/aquarium/src/content/pages/about.mdx +21 -0
  31. package/templates/aquarium/src/content/pages/code-of-conduct.mdx +38 -0
  32. package/templates/aquarium/src/content/pages/get-involved.mdx +27 -0
  33. package/templates/aquarium/src/content/speakers/.gitkeep +0 -0
  34. package/templates/aquarium/src/content/venues/.gitkeep +0 -0
  35. package/templates/foodie/popular.config.ts +221 -0
  36. package/templates/foodie/public/images/hero.png +0 -0
  37. package/templates/foodie/public/images/logo.png +0 -0
  38. package/templates/foodie/public/images/organizer-1.png +0 -0
  39. package/templates/foodie/public/images/organizer-2.png +0 -0
  40. package/templates/foodie/public/images/organizer-3.png +0 -0
  41. package/templates/foodie/public/images/post-1.png +0 -0
  42. package/templates/foodie/public/images/post-2.png +0 -0
  43. package/templates/foodie/public/images/post-3.png +0 -0
  44. package/templates/foodie/src/content/authors/sofia.md +7 -0
  45. package/templates/foodie/src/content/blog/dessert-diary.md +14 -0
  46. package/templates/foodie/src/content/blog/ice-cream-selfie-flash-mob.md +15 -0
  47. package/templates/foodie/src/content/blog/pierogi-night-in-photos.md +21 -0
  48. package/templates/foodie/src/content/blog/poutine-debate.md +12 -0
  49. package/templates/foodie/src/content/blog/two-breads-and-a-coffee-machine.md +14 -0
  50. package/templates/foodie/src/content/docs/handbook.mdx +127 -0
  51. package/templates/foodie/src/content/docs/runbooks.mdx +57 -0
  52. package/templates/foodie/src/content/events/dessert-crawl.md +14 -0
  53. package/templates/foodie/src/content/events/pierogi-night.md +16 -0
  54. package/templates/foodie/src/content/events/poutine-cookoff.md +14 -0
  55. package/templates/foodie/src/content/events/summer-potluck.md +14 -0
  56. package/templates/foodie/src/content/organizers/marcus.md +13 -0
  57. package/templates/foodie/src/content/organizers/sofia.md +13 -0
  58. package/templates/foodie/src/content/organizers/volunteer.md +13 -0
  59. package/templates/foodie/src/content/pages/about.mdx +21 -0
  60. package/templates/foodie/src/content/pages/code-of-conduct.mdx +38 -0
  61. package/templates/foodie/src/content/pages/get-involved.mdx +27 -0
  62. package/templates/foodie/src/content/pages/speak.md +23 -0
  63. package/templates/foodie/src/content/pages/start.md +25 -0
  64. package/templates/foodie/src/content/speakers/.gitkeep +0 -0
  65. package/templates/foodie/src/content/venues/.gitkeep +0 -0
  66. package/templates/kdrama/popular.config.ts +226 -0
  67. package/templates/kdrama/public/images/hero.png +0 -0
  68. package/templates/kdrama/public/images/logo.png +0 -0
  69. package/templates/kdrama/public/images/organizer-1.png +0 -0
  70. package/templates/kdrama/public/images/organizer-2.png +0 -0
  71. package/templates/kdrama/public/images/organizer-3.png +0 -0
  72. package/templates/kdrama/public/images/post-1.png +0 -0
  73. package/templates/kdrama/public/images/post-2.png +0 -0
  74. package/templates/kdrama/public/images/post-3.png +0 -0
  75. package/templates/kdrama/src/content/authors/hana.md +7 -0
  76. package/templates/kdrama/src/content/blog/attorney-woo-trivia-recap.md +14 -0
  77. package/templates/kdrama/src/content/blog/castaway-diva-feelings.md +14 -0
  78. package/templates/kdrama/src/content/blog/crush-1988-me.md +14 -0
  79. package/templates/kdrama/src/content/blog/karaoke-night-in-photos.mdx +24 -0
  80. package/templates/kdrama/src/content/blog/vincenzo-recap.md +14 -0
  81. package/templates/kdrama/src/content/docs/handbook.mdx +127 -0
  82. package/templates/kdrama/src/content/docs/runbooks.mdx +57 -0
  83. package/templates/kdrama/src/content/events/attorney-woo-trivia.md +16 -0
  84. package/templates/kdrama/src/content/events/castaway-diva-finale.md +23 -0
  85. package/templates/kdrama/src/content/events/ost-karaoke.md +14 -0
  86. package/templates/kdrama/src/content/events/step-into-the-light.md +14 -0
  87. package/templates/kdrama/src/content/events/vincenzo-watch-party.md +19 -0
  88. package/templates/kdrama/src/content/organizers/hana.md +13 -0
  89. package/templates/kdrama/src/content/organizers/priya.md +13 -0
  90. package/templates/kdrama/src/content/organizers/volunteer.md +13 -0
  91. package/templates/kdrama/src/content/pages/about.mdx +21 -0
  92. package/templates/kdrama/src/content/pages/code-of-conduct.mdx +38 -0
  93. package/templates/kdrama/src/content/pages/get-involved.mdx +27 -0
  94. package/templates/kdrama/src/content/pages/speak.md +23 -0
  95. package/templates/kdrama/src/content/speakers/minji.md +9 -0
  96. package/templates/kdrama/src/content/venues/half-moon-cafe.md +11 -0
  97. package/templates/starter/popular.config.ts +228 -0
  98. package/templates/starter/public/images/hero.png +0 -0
  99. package/templates/starter/public/images/logo.png +0 -0
  100. package/templates/starter/public/images/organizer-1.png +0 -0
  101. package/templates/starter/public/images/post-1.png +0 -0
  102. package/templates/starter/src/content/authors/sam.md +7 -0
  103. package/templates/starter/src/content/blog/hello-world.md +12 -0
  104. package/templates/starter/src/content/docs/handbook.mdx +127 -0
  105. package/templates/starter/src/content/docs/runbooks.mdx +57 -0
  106. package/templates/starter/src/content/events/first-meetup.md +16 -0
  107. package/templates/starter/src/content/events/launch-night.md +20 -0
  108. package/templates/starter/src/content/organizers/sam.md +7 -0
  109. package/templates/starter/src/content/pages/about.mdx +22 -0
  110. package/templates/starter/src/content/pages/code-of-conduct.mdx +38 -0
  111. package/templates/starter/src/content/pages/get-involved.mdx +27 -0
  112. package/templates/starter/src/content/pages/speak.md +23 -0
  113. package/templates/starter/src/content/pages/start.md +25 -0
  114. package/templates/starter/src/content/speakers/alex.md +7 -0
  115. package/templates/starter/src/content/venues/community-hall.md +13 -0
  116. package/templates/superfan/popular.config.ts +235 -0
  117. package/templates/superfan/public/images/chart.svg +13 -0
  118. package/templates/superfan/public/images/concert.svg +12 -0
  119. package/templates/superfan/public/images/hero.svg +38 -0
  120. package/templates/superfan/public/images/logo.svg +6 -0
  121. package/templates/superfan/public/images/mic.svg +14 -0
  122. package/templates/superfan/public/images/news.svg +8 -0
  123. package/templates/superfan/public/images/riley.svg +9 -0
  124. package/templates/superfan/public/images/vinyl.svg +12 -0
  125. package/templates/superfan/src/content/authors/riley.md +7 -0
  126. package/templates/superfan/src/content/blog/concert-diary-lost-voice.md +14 -0
  127. package/templates/superfan/src/content/blog/every-era-ranked.md +14 -0
  128. package/templates/superfan/src/content/blog/new-vinyl-day.md +15 -0
  129. package/templates/superfan/src/content/blog/welcome-to-the-new-place.md +14 -0
  130. package/templates/superfan/src/content/docs/concert-prep.mdx +25 -0
  131. package/templates/superfan/src/content/docs/listening-guide.mdx +39 -0
  132. package/templates/superfan/src/content/events/fancon-panel.md +17 -0
  133. package/templates/superfan/src/content/events/podcast-b-sides-show.md +14 -0
  134. package/templates/superfan/src/content/organizers/.gitkeep +0 -0
  135. package/templates/superfan/src/content/pages/about.mdx +17 -0
  136. package/templates/superfan/src/content/pages/say-hi.mdx +23 -0
  137. package/templates/superfan/src/content/speakers/.gitkeep +0 -0
  138. package/templates/superfan/src/content/venues/.gitkeep +0 -0
@@ -0,0 +1,127 @@
1
+ ---
2
+ weight: 10
3
+ title: "Organizer Handbook"
4
+ eyebrow: "Organizer handbook"
5
+ lead: "Everything you need to run a great meetup. This is the playbook we hand to every organizer and volunteer, the principles and expectations behind a good event. For the step-by-step checklists, see the Runbooks."
6
+ ---
7
+
8
+ import Callout from 'astro-theme-popular/components/Callout.astro';
9
+
10
+ ## Welcome & how to use this
11
+
12
+ Thank you for helping run Your Community. Organizing is a team effort, and you are never expected to do it alone. This handbook is the *why* and *what*, the principles and expectations. The [Runbooks](/runbooks/) are the *how*, tick-box checklists you follow the week of an event.
13
+
14
+ <Callout tone="info" title="Our north star">
15
+ Every decision comes back to one question: *will this help someone who has never been to a meetup feel welcome here?* If yes, we're on the right track.
16
+ </Callout>
17
+
18
+ Keep this handbook open in a browser tab during planning. Share it freely with new volunteers, nothing here is secret.
19
+
20
+ ## Roles & responsibilities
21
+
22
+ We keep roles lightweight. One person can wear several hats, and hats rotate so no one burns out.
23
+
24
+ - **Lead organizer**: owns the calendar, confirms each event, and is the final point of contact.
25
+ - **Venue coordinator**: sources and confirms the space, checks accessibility, and is the on-site contact for the host.
26
+ - **Session wrangler**: finds and briefs session hosts, collects intros and titles, and looks after them on the night.
27
+ - **Comms lead**: creates the event page, writes announcements, and posts recaps across our channels.
28
+ - **Welcome host**: the friendly face at the door: greets arrivals and makes sure no newcomer stands alone.
29
+
30
+ <Callout tone="tip" title="Two-deep rule">
31
+ Aim for at least two organizers at every event. If one person is unwell or stuck in traffic, the meetup still happens.
32
+ </Callout>
33
+
34
+ ## Meeting cadence & format
35
+
36
+ We aim for one gathering a month, usually a weekday evening from 6:00 to 8:30 PM. Formats rotate to keep things fresh and to serve everyone:
37
+
38
+ - **Session night**: one or two hosts lead a topic, with time for questions. The easiest format to run.
39
+ - **Hands-on night**: everyone participates and makes something. Needs helpers roaming the room.
40
+ - **Show & tell**: five-minute shares, great for first-timers.
41
+ - **Social**: a lower-effort month to just connect the community.
42
+
43
+ A dependable rhythm matters more than a perfect one. If a month is quiet, run a small social rather than skipping entirely.
44
+
45
+ ## Choosing a venue
46
+
47
+ A good venue is the single biggest lever on how welcoming an event feels. Look for:
48
+
49
+ - Capacity for 20–40 people, seated, with room to mingle.
50
+ - Step-free access and an accessible washroom, this is non-negotiable.
51
+ - A screen or space suited to your format, and any equipment your sessions need.
52
+ - Within a short walk of transit or with easy parking.
53
+ - A host contact who can let us in, and stay or delegate a key holder.
54
+
55
+ <Callout tone="warn" title="Always visit first">
56
+ Confirm the room, the setup and the accessible entrance in person (or via a trusted host) before you announce the event. Surprises on the night are stressful for everyone.
57
+ </Callout>
58
+
59
+ ## Finding session hosts
60
+
61
+ Great hosts are all around us, including in our own audience. We actively lower the bar to leading a session:
62
+
63
+ - Invite first-timers and offer to co-host or rehearse with them.
64
+ - Keep an ongoing list of members who've mentioned a topic they love.
65
+ - Ask past attendees what they'd like to learn, then find someone to lead it.
66
+ - Reach out to neighbouring community groups for cross-promotion.
67
+ - Always confirm a title, a 2–3 sentence intro, and a photo for promotion.
68
+
69
+ What we tell every new host: *no experience necessary. Whether it's your first time leading a session or your fiftieth, we welcome you, and we'll help you prepare.*
70
+
71
+ ## Promotion & communications
72
+
73
+ Consistency beats cleverness. Post early, post again, and always include the essentials: what, when, where, and how to RSVP.
74
+
75
+ - Create the event on your RSVP platform as the single source of truth.
76
+ - Announce ~2 weeks out, remind ~3 days out, and post a "tonight!" nudge on the day.
77
+ - Cross-post to your usual channels.
78
+ - Use a consistent poster template so every announcement looks unmistakably yours.
79
+ - Write a short recap within a week, photos (with consent) and a thank-you to hosts.
80
+
81
+ ## Budget & sponsorship
82
+
83
+ Our events are free to attend and run on a shoestring. Most costs are covered in-kind by venue hosts.
84
+
85
+ - Typical costs: light snacks and drinks. Venues and equipment are usually donated.
86
+ - Ask sponsors for in-kind support (space, food, supplies) before cash.
87
+ - Thank every sponsor publicly, by name, with a link.
88
+ - Keep a simple shared spreadsheet of what was spent and who paid.
89
+ - Never require payment or personal financial details from attendees.
90
+
91
+ ## Safety & Code of Conduct
92
+
93
+ Every event runs under our [Code of Conduct](/code-of-conduct/). As an organizer you are also a first responder for it.
94
+
95
+ - Open every event with a brief, warm reminder of the Code of Conduct.
96
+ - Make sure attendees know which organizers to approach with a concern.
97
+ - Take every report seriously, listen without judgement, and protect the reporter's privacy.
98
+ - You can ask anyone to leave whose behaviour makes others unsafe, you have that authority.
99
+ - Debrief with a co-organizer after any incident and log what happened privately.
100
+
101
+ <Callout tone="warn" title="When in doubt, prioritize safety">
102
+ It is always better to pause an activity, remove a disruptive person, or end early than to let a harmful situation continue. The community will back you.
103
+ </Callout>
104
+
105
+ ## Day-of logistics
106
+
107
+ The [Day-of runbook](/runbooks/) has the full checklist. In short:
108
+
109
+ - Arrive 45–60 minutes early to set up the space and the welcome table.
110
+ - Put up simple signage from the entrance to the room.
111
+ - Greet every person as they arrive; hand newcomers a friendly hello, not a form.
112
+ - Start within 10 minutes of the hour; keep sessions to time so people catch transit home.
113
+ - Take a few photos for the recap, always ask before photographing anyone.
114
+
115
+ ## After the event
116
+
117
+ The event isn't over when the room empties. A tidy wrap-up keeps hosts happy and the community informed.
118
+
119
+ - Leave the venue cleaner than you found it and thank the host in person.
120
+ - Send thank-you notes to hosts and sponsors within 48 hours.
121
+ - Publish a recap post with photos and shout-outs within a week.
122
+ - Note what worked and what didn't in the shared organizer log.
123
+ - Lock in a date for next month before momentum fades.
124
+
125
+ <Callout tone="tip" title="Better late than never">
126
+ If a recap slips, publish it anyway. Our community would rather read a late recap than none at all.
127
+ </Callout>
@@ -0,0 +1,57 @@
1
+ ---
2
+ weight: 20
3
+ title: "Meetup Runbooks"
4
+ eyebrow: "Runbooks"
5
+ lead: "Six short checklists that take you from an empty calendar slot to a published recap. Your progress is saved in your browser, so you can close the tab and pick up where you left off. Start about three weeks before the event."
6
+ ---
7
+
8
+ import Callout from 'astro-theme-popular/components/Callout.astro';
9
+ import Checklist from 'astro-theme-popular/components/Checklist.astro';
10
+
11
+ ## 1 · Book a venue
12
+
13
+ Lock the room before anything else, the date depends on it. See the handbook's [venue criteria](/handbook/) for what makes a good space.
14
+
15
+ <Checklist id="rb-venue" items={["Shortlist 2–3 possible venues from our host contacts.","Confirm capacity (20–40), step-free access and an accessible washroom.","Confirm the equipment and setup your format needs.","Agree the date, start/end time and who holds the key.","Visit or verify the room in person.","Get the host's day-of phone number and building access details.","Send the host a written confirmation with date, time and headcount."]} />
16
+
17
+ ## 2 · Line up a session host
18
+
19
+ A confirmed venue makes it easy to invite a host. Remember: first-timers welcome, offer to help them prepare.
20
+
21
+ <Checklist id="rb-host" items={["Invite a session host (or two), check our list of members with topics they love.","Confirm the session title and format (talk / hands-on / show & tell).","Collect a 2–3 sentence intro and a photo for promotion.","Share the run of show and expected attendance.","For hands-on nights: confirm any supplies or prep to tell attendees in advance.","Offer a rehearsal or co-hosting to first-timers.","Send a calendar invite with venue address and arrival time."]} />
22
+
23
+ <Callout tone="info" title="No host this month?">
24
+ Run a show & tell or a social. A dependable rhythm matters more than a packed agenda.
25
+ </Callout>
26
+
27
+ ## 3 · Set up the event page
28
+
29
+ Your RSVP platform is the single source of truth. Create the event once all the details are firm.
30
+
31
+ <Checklist id="rb-page" items={["Create the event with title, date and time.","Write a short, warm description: what, who it's for, and that everyone is welcome.","Add the venue address and accessibility notes.","Set a sensible capacity matching the room.","Add the host's name, session title and intro.","Upload the event image.","Turn on a waitlist and a reminder email."]} />
32
+
33
+ ## 4 · Promote the event
34
+
35
+ Post early, remind often. Use the [communications guidance](/handbook/) for channels and timing.
36
+
37
+ <Checklist id="rb-promote" items={["Announce ~2 weeks out across your channels.","Make the poster with your template.","Post a reminder ~3 days before with the RSVP link.","Post a \"tonight!\" nudge on the day of the event.","Thank confirmed sponsors/hosts in the announcements.","Ask the session host to share the event with their network."]} />
38
+
39
+ ## 5 · Day-of run of show
40
+
41
+ Arrive early, set a warm tone, and keep to time so everyone catches transit home.
42
+
43
+ <Checklist id="rb-dayof" items={["Arrive 45–60 minutes early; set up the room and test any equipment.","Set up the welcome table and put up signage from the entrance.","Lay out snacks and drinks.","Greet every arrival; give newcomers a warm, personal hello.","Open with a brief Code of Conduct reminder and housekeeping.","Introduce the session host; keep things to time.","Take a few photos, always ask consent first.","Thank everyone, announce next month's date, and close up safely."]} />
44
+
45
+ <Callout tone="warn" title="Safety first, always">
46
+ You have the authority to pause an activity or ask someone to leave if behaviour makes others unsafe. See the [Code of Conduct](/code-of-conduct/).
47
+ </Callout>
48
+
49
+ ## 6 · Post-event recap
50
+
51
+ A tidy wrap-up keeps hosts happy and the community in the loop.
52
+
53
+ <Checklist id="rb-recap" items={["Leave the venue cleaner than you found it; thank the host in person.","Send thank-you notes to hosts and sponsors within 48 hours.","Pick a few consented photos for the recap.","Write and publish a short recap post with shout-outs.","Log what worked and what didn't in the organizer notes.","Confirm next month's date and venue."]} />
54
+
55
+ <Callout tone="tip" title="Better late than never">
56
+ If the recap slips, publish it anyway, our community would rather read a late one than none at all.
57
+ </Callout>
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: "Our first meetup"
3
+ date: 2026-08-06
4
+ description: "Describe the event in a sentence or two."
5
+ image: "/images/post-1.png"
6
+ tags: ["meetup"]
7
+ time: "6:00 PM – 8:00 PM"
8
+ # References a venue page and a speaker profile: the event inherits the
9
+ # venue's name, address and arrival notes, and shows Alex's bio card.
10
+ venueRef: "community-hall"
11
+ speakers: ["alex"]
12
+ checkin: "Bring your registration email (print or phone) and photo ID."
13
+ rsvp: "https://example.com/rsvp?event=first-meetup&src=site"
14
+ ---
15
+
16
+ Describe the event. This one is dated in the future so it shows under **Upcoming**, events move to **Past** automatically after their date.
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: "Our launch night"
3
+ date: 2026-05-14
4
+ description: "Our first evening together, with two short talks and lots of hellos."
5
+ image: "/images/post-1.png"
6
+ tags: ["meetup"]
7
+ time: "6:00 PM – 8:00 PM"
8
+ venueRef: "community-hall"
9
+ # Multi-talk event: the talks[] array renders a Talks section with per-talk
10
+ # recording and slides links, and each talk feeds the /talks/ archive.
11
+ talks:
12
+ - title: "Why we started this community"
13
+ speaker: alex
14
+ recording: "https://example.com/watch/launch-night"
15
+ slides: "https://example.com/slides/launch-night.pdf"
16
+ - title: "What to expect at future meetups"
17
+ recording: "https://example.com/watch/what-to-expect"
18
+ ---
19
+
20
+ A recap of our launch night. Both talks were recorded, catch up below.
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: "Sam Example"
3
+ weight: 10
4
+ role: "Lead organizer"
5
+ photo: "/images/organizer-1.png"
6
+ description: "Replace with a short, friendly bio."
7
+ ---
@@ -0,0 +1,22 @@
1
+ ---
2
+ title: "About us"
3
+ eyebrow: "About us"
4
+ lead: "One sentence about your community."
5
+ ---
6
+
7
+ import FAQ from 'astro-theme-popular/components/FAQ.astro';
8
+ import FAQItem from 'astro-theme-popular/components/FAQItem.astro';
9
+
10
+ Write two or three warm paragraphs about your community: who it's for, what a gathering looks like, and that newcomers are always welcome.
11
+
12
+ ## Land acknowledgement
13
+
14
+ Add your community's land acknowledgement or welcome statement here, or remove this section.
15
+
16
+ ## Common questions
17
+
18
+ <FAQ>
19
+ <FAQItem q="Do I need experience to join?" open>No. Newcomers are exactly who this is for, come as you are.</FAQItem>
20
+ <FAQItem q="Is it free?">Yes. Events are free to attend.</FAQItem>
21
+ <FAQItem q="How do I find the room?">Check the event page for arrival notes (buzz codes, door instructions). If in doubt, ask an organizer when you arrive.</FAQItem>
22
+ </FAQ>
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: "Code of Conduct"
3
+ eyebrow: "Code of Conduct"
4
+ lead: "Everyone is welcome, and everyone is safe. This applies to all our events, online spaces and channels."
5
+ ---
6
+
7
+ import Callout from 'astro-theme-popular/components/Callout.astro';
8
+
9
+ ## The short version
10
+
11
+ Be kind. Be respectful. Assume good faith. Your Community is a community of people with a wide range of backgrounds and experience, and we're here to enjoy this together. Harassment and exclusionary behaviour are never acceptable.
12
+
13
+ ## Expected behaviour
14
+
15
+ - Be welcoming, friendly and patient, especially with newcomers.
16
+ - Be considerate in your speech and actions, and respectful of differing viewpoints.
17
+ - Assume the person you're talking to knows things you don't, and vice versa.
18
+ - Give others space and time to speak; make room for quieter voices.
19
+
20
+ ## Unacceptable behaviour
21
+
22
+ - Harassment, intimidation, or discrimination in any form.
23
+ - Offensive comments related to gender, gender identity, sexual orientation, disability, physical appearance, race, ethnicity, religion or experience level.
24
+ - Unwelcome sexual attention, or deliberate intimidation, stalking or following.
25
+ - Sustained disruption of sessions or other events.
26
+ - Photographing or recording someone without their consent.
27
+
28
+ <Callout tone="warn" title="Reporting">
29
+ If you experience or witness behaviour that makes you feel unsafe, tell any organizer at the event, or email **hello@example.com**. Reports are taken seriously and handled with discretion, and we will always protect the privacy of the person reporting.
30
+ </Callout>
31
+
32
+ ## Consequences
33
+
34
+ Organizers may take any action they deem appropriate, up to and including warning the person, asking them to leave the event, or barring them from future events. Organizers have full authority to protect the safety and comfort of the community.
35
+
36
+ ---
37
+
38
+ *This Code of Conduct is adapted from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) (CC-BY 3.0) and the [Geek Feminism anti-harassment policy template](https://geekfeminism.fandom.com/wiki/Community_anti-harassment/Policy) (CC0). Adapt it to your community, it's part of the theme's example content.*
@@ -0,0 +1,27 @@
1
+ ---
2
+ title: "Get involved"
3
+ eyebrow: "Get involved"
4
+ lead: "Our community runs on people who step up, to host a session, to offer a space, to sponsor, and simply to show up. Here's how you can help."
5
+ ---
6
+
7
+ ## Host a session
8
+
9
+ We're always looking for members to lead a session! No experience necessary. Whether it's your first time or your fiftieth, we welcome you, and we'll help you prepare, rehearse, or even co-host.
10
+
11
+ Sessions run 20–30 minutes; show & tell spots are just five. Bring anything our community would love.
12
+
13
+ <a class="g-btn g-btn--primary" href="mailto:hello@example.com?subject=Session%20idea"><i class="fa-solid fa-hand-sparkles" aria-hidden="true"></i> Suggest a session</a>
14
+
15
+ ## Offer a venue
16
+
17
+ Have a room for 20–40 people, near transit, with step-free access? You can host our next gathering. Community halls, cafés and workplaces make wonderful hosts. See the [venue checklist](/handbook/) for what we look for.
18
+
19
+ We'll bring the community and the program; you bring the room. We always thank our hosts publicly by name.
20
+
21
+ <a class="g-btn g-btn--outline" href="mailto:hello@example.com?subject=Venue"><i class="fa-solid fa-location-dot" aria-hidden="true"></i> Get in touch</a>
22
+
23
+ ## Sponsor & support
24
+
25
+ Your Community is free to attend and runs on in-kind support. Sponsors can provide space, food or supplies, and are thanked by name with a link at the event and in our recap.
26
+
27
+ <a class="g-btn g-btn--primary" href="https://example.com/donate"><i class="fa-solid fa-heart" aria-hidden="true"></i> Support the club</a>
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: "Speak with us"
3
+ eyebrow: "Call for speakers"
4
+ lead: "Got something to share? We would love to have you on the schedule."
5
+ ---
6
+
7
+ You do not need to be a professional speaker, and your topic does not need to be groundbreaking. Some of our best sessions have come from people talking about something they learned last month.
8
+
9
+ ## What we look for
10
+
11
+ A talk that teaches, sparks a conversation, or shows the room something you are excited about. First-time speakers are especially welcome, this is a friendly place to start.
12
+
13
+ ## Lightning talks welcome
14
+
15
+ Not ready for a full session? A five-minute lightning talk is a great way to dip a toe in. Bring one idea, one demo, or one story.
16
+
17
+ ## We will help with your slides
18
+
19
+ Tell us roughly what you want to cover and an organizer will help you shape it: an outline, a practice run, feedback on your slides, whatever is useful. You will not be left to figure it out alone.
20
+
21
+ ## Propose a talk
22
+
23
+ Send us your idea through our [call for speakers form](https://example.com/cfp). Not sure yet? [Say hello in the chat](https://example.com/chat) and we can talk it through.
@@ -0,0 +1,25 @@
1
+ ---
2
+ title: "Start here"
3
+ eyebrow: "New here?"
4
+ lead: "Coming to your first event? Here is everything you need to feel at home before you walk in."
5
+ ---
6
+
7
+ New faces are the whole point. You do not need to know anyone, and you do not need to be an expert, come as you are.
8
+
9
+ ## What a typical evening looks like
10
+
11
+ Doors open a little before the start time so there is room to arrive, grab a drink, and settle in. We usually open with quick welcomes, run the main session, then leave plenty of time to talk afterwards. Nothing is mandatory: stay for all of it or slip out when you need to.
12
+
13
+ ## Join the chat first
14
+
15
+ Most of the community lives in our group chat between events. Joining before you arrive is the easiest way to break the ice: say hello, ask what to expect, and you will already recognise a few names in the room. There is a "Join the chat" link in the header and footer once it is set up.
16
+
17
+ ## Who to look for on arrival
18
+
19
+ Look for an organizer near the door, they are expecting you and happy to make introductions. If you are not sure who that is, ask anyone; regulars are used to helping newcomers find their feet.
20
+
21
+ ## You can just watch
22
+
23
+ There is no pressure to speak, present, or perform. Plenty of people come for a few events just to listen before they say much at all. Watching quietly from the back is a completely normal way to start, and you are welcome to do exactly that.
24
+
25
+ When you are ready for more, [say hello in the chat](https://example.com/chat) or [read the FAQ](/about/).
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: "Alex Example"
3
+ role: "Guest speaker"
4
+ photo: "/images/organizer-1.png"
5
+ bio: "Replace with a short speaker bio. This card appears on events Alex speaks at, and on their profile page."
6
+ website: "https://example.com"
7
+ ---
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: "Community Hall"
3
+ address: "123 Your Street"
4
+ notes: "Buzz 204 at the side door; the elevator to level 2 is past the mailboxes."
5
+ accessibility: "Step-free access via the main entrance; accessible washroom on site."
6
+ wheelchair: true
7
+ transit: "Two blocks from Central station; bus 12 stops outside."
8
+ parking: "Free street parking after 6pm; a paid lot is next door."
9
+ access: "Gender-neutral washrooms on level 2. A quiet room is available on request. Fragrance-free space; please skip strong scents. Kids welcome, there's a play corner at the back."
10
+ website: "https://example.com"
11
+ ---
12
+
13
+ Describe the venue: the room, the vibe, anything a first-time visitor should know. Events that set `venueRef: "community-hall"` inherit this venue's name, address and arrival notes automatically.
@@ -0,0 +1,235 @@
1
+ /** Popular: theme configuration (Truly Madly Riley, personal-site demo).
2
+ * Shows the theme running a personal site for one person instead of a
3
+ * community: the blog is a news feed, events are speaking appearances,
4
+ * and there is no organizers section at all. Riley is fictional.
5
+ * See README for all options. */
6
+
7
+ export const SITE = {
8
+ title: "Truly Madly Riley",
9
+ tagline: "A fictional superfan's personal site, demo content for the Popular theme",
10
+ description: "Riley's corner of the internet: Darren Hayes fandom, vinyl news, and the occasional conference talk. (Riley is a made-up person, this is example content demonstrating the Popular theme as a personal site.)",
11
+ brandName: "Truly Madly",
12
+ brandSub: "Riley",
13
+ logo: '/images/logo.svg',
14
+ favicon: '/images/logo.svg',
15
+ ogImage: '/images/hero.svg',
16
+ locale: 'en-US',
17
+ customCSS: ['https://fonts.googleapis.com/css2?family=Cinzel+Decorative:wght@700&family=Cinzel:wght@700&display=swap'],
18
+ landAcknowledgement: "Fan-made and gloriously unofficial: this site is a love letter, not affiliated with anyone it adores.",
19
+ };
20
+
21
+ /* UI strings. The key set matches the Hugo theme's i18n/en.toml (see
22
+ PARITY.md); the values here are re-voiced for a personal site, which is
23
+ also how you'd translate the theme. */
24
+ export const STRINGS: Record<string, string> = {
25
+ skipToContent: 'Skip to content',
26
+ primaryNav: 'Primary',
27
+ toggleMenu: 'Toggle menu',
28
+ nextMeetup: 'Next appearance',
29
+ venueTba: 'Venue to be announced',
30
+ eventCancelled: 'Cancelled',
31
+ rsvp: 'Details',
32
+ rsvpExternal: 'Event details',
33
+ allEvents: 'All appearances',
34
+ allSpeakers: 'All speakers',
35
+ allVenues: 'All venues',
36
+ allOrganizers: 'All organizers',
37
+ comingUp: 'On the calendar',
38
+ upcomingEvents: 'Upcoming appearances',
39
+ upcomingLead: 'Podcasts, panels, popups and the occasional conference. Come say hi after.',
40
+ noUpcomingEvents: 'Nothing booked right now. Invite me to your thing, or your karaoke night.',
41
+ lookingBack: 'Looking back',
42
+ pastEvents: 'Past appearances',
43
+ venueWanted: 'Venue wanted',
44
+ confirmed: 'Confirmed',
45
+ fromTheBlog: 'From the blog',
46
+ latestFromCommunity: 'Latest news & obsessions',
47
+ readTheBlog: 'Read the news',
48
+ allPosts: 'All posts',
49
+ filterLabel: 'Filter:',
50
+ filterAll: 'All',
51
+ subscribeRss: 'Subscribe via RSS',
52
+ subscribeCalendar: 'Subscribe to calendar',
53
+ watchRecording: 'Watch',
54
+ viewSlides: 'Slides',
55
+ hasRecording: 'Recording available',
56
+ talks: 'Talks',
57
+ talksLead: 'Every talk from our past events, with recordings and slides where we have them.',
58
+ learnMore: 'Learn more',
59
+ joinChat: 'Join the chat',
60
+ speakerInviteTitle: 'Your name here?',
61
+ speakerInviteBody: 'We are always looking for new voices. Lightning talks welcome, and we will help you prepare.',
62
+ subscribeRssTitle: 'Follow new posts in any feed reader',
63
+ noPosts: 'No posts yet, check back soon.',
64
+ ourSpeaker: 'Our speaker',
65
+ minRead: '{n} min read',
66
+ authorsBy: 'By',
67
+ listSeparator: ', ',
68
+ listSeparatorFinal: ' & ',
69
+ posts: 'Posts',
70
+ guest: 'Guest',
71
+ website: 'Website',
72
+ previewLabel: 'Preview',
73
+ previewBanner: 'This is a preview. Nothing here is published yet.',
74
+ checklist: 'Checklist',
75
+ copyCode: 'Copy code',
76
+ checklistDone: 'done',
77
+ writtenBy: 'Written by {name}',
78
+ eyebrowBlog: 'News',
79
+ eyebrowEvents: 'Appearances',
80
+ eyebrowAuthor: 'Author',
81
+ eyebrowDocs: 'Guides',
82
+ eyebrowTag: 'Tag',
83
+ taggedCount: '{n} post(s) tagged {tag}',
84
+ speakers: 'Speakers',
85
+ eyebrowSpeaker: 'Speaker',
86
+ eyebrowOrganizer: 'Organizer',
87
+ sessionsBy: 'Sessions by {name}',
88
+ eyebrowVenue: 'Venue',
89
+ gettingThere: 'Getting there & access',
90
+ wheelchairAccessible: 'Wheelchair accessible',
91
+ transit: 'Transit',
92
+ parking: 'Parking',
93
+ venueEvents: 'Events held here',
94
+ beforeYouArrive: 'Before you arrive',
95
+ postNavigation: 'More posts',
96
+ newerPost: 'Newer post',
97
+ olderPost: 'Older post',
98
+ paginationLabel: 'Pagination',
99
+ paginationPrev: 'Previous',
100
+ paginationNext: 'Next',
101
+ };
102
+
103
+ /* List pagination size. Mirrors Hugo's [pagination] pagerSize (see PARITY.md). */
104
+ export const PAGINATION = { pageSize: 3 };
105
+
106
+ /* Renameable content sections: point post-author bylines or the homepage
107
+ team grid at a differently-named collection (must exist in your
108
+ content.config.ts). Defaults are the theme's own section names.
109
+ Hugo parity: [params.sections] (see PARITY.md). */
110
+ export const SECTIONS_MAP = {
111
+ authors: 'authors',
112
+ team: 'organizers',
113
+ };
114
+
115
+ /* Celestial gold on midnight: burnished gold with dark button text,
116
+ silk-cream ink, deep cosmos surfaces. Uses the dark-palette brand keys. */
117
+ export const BRAND: Record<string, string> = {
118
+ primary: '#C3A364', // burnished gold: buttons & main branding
119
+ primaryHover: '#D9BA7B', // brighter champagne gold on hover
120
+ primaryActive: '#A1834C', // deeper metallic gold when active
121
+ secondary: '#E6C687', // soft champagne shimmer
122
+ accent: '#F3E5AB', // radiant stardust cream
123
+ ink: '#F4F1EA', // silk-cream headings on the dark backgrounds
124
+ link: '#D9BA7B', // prose links need light gold on midnight
125
+ linkHover: '#F3E5AB',
126
+ surfaceWash: '#121B2D', // midnight-blue hero / section wash
127
+ surfaceWashSoft: '#141F36',
128
+ surfaceInk: '#0A0E1A', // deep cosmos footer bands
129
+ surfacePage: '#0A0E1A', // the page itself goes dark
130
+ surfaceCard: '#121B2D',
131
+ surfaceTertiary: '#0F1626',
132
+ textBody: '#D9D4C5',
133
+ textMuted: '#A39D8A',
134
+ textOnBrand: '#0A0E1A', // dark text on gold buttons, not white
135
+ borderSubtle: '#26304A',
136
+ fontSans: 'Inter, system-ui, sans-serif',
137
+ fontDisplay: '"Cinzel Decorative", "Cinzel", Inter, sans-serif',
138
+ };
139
+
140
+ export const NAV: {
141
+ label: string;
142
+ href: string;
143
+ children?: { label: string; href: string }[];
144
+ }[] = [
145
+ { label: 'About', href: '/about/' },
146
+ { label: 'News', href: '/blog/' },
147
+ { label: 'Appearances', href: '/events/' },
148
+ { label: 'Listening guide', href: '/listening-guide/' },
149
+ ];
150
+
151
+ export const CTA = { label: 'Say hi', url: 'mailto:hello@example.com', icon: 'fa-solid fa-envelope' };
152
+
153
+ export const SOCIAL = [
154
+ { label: 'Mastodon', icon: 'fa-brands fa-mastodon', url: 'https://example.com' },
155
+ { label: 'Instagram', icon: 'fa-brands fa-instagram', url: 'https://example.com' },
156
+ { label: 'RSS', icon: 'fa-solid fa-rss', url: '/rss.xml' },
157
+ { label: 'Email', icon: 'fa-solid fa-envelope', url: 'mailto:hello@example.com' },
158
+ ];
159
+
160
+ export const FOOTER = {
161
+ tagline: "Truly, madly, deeply a fan site, an Astro demo site for the Popular theme",
162
+ credit: { label: 'Popular. An Astro theme by Mariatta.', url: 'https://popular.mariatta.ca/' },
163
+ columns: [
164
+ { title: 'Site', links: [
165
+ { label: 'About', href: '/about/' },
166
+ { label: 'News', href: '/blog/' },
167
+ { label: 'Appearances', href: '/events/' },
168
+ ]},
169
+ { title: 'Fan stuff', links: [
170
+ { label: 'Listening guide', href: '/listening-guide/' },
171
+ { label: 'Concert prep', href: '/concert-prep/' },
172
+ ]},
173
+ { title: 'Say hi', links: [
174
+ { label: 'Email', href: 'mailto:hello@example.com' },
175
+ { label: 'Mastodon', href: 'https://example.com' },
176
+ ]},
177
+ ],
178
+ };
179
+
180
+ /** Support box at the bottom of blog posts; a personal site's tip jar. */
181
+ export const SUPPORT = {
182
+ badge: 'Enjoying the blog?',
183
+ text: 'This site is a one-person labour of love (and of one particular discography). If a post made your day, you can toss a coin in the tip jar or just tell me your favourite b-side.',
184
+ ctas: [
185
+ { label: 'Tip jar', url: 'https://example.com/tips', variant: 'primary' },
186
+ { label: 'Say hi', url: 'mailto:hello@example.com', variant: 'outline' },
187
+ ],
188
+ };
189
+
190
+ /** Section list-page headers. */
191
+ export const SECTIONS = {
192
+ blog: { eyebrow: 'News', title: 'News & obsessions', lead: 'Site news, vinyl arrivals, concert diaries and essays nobody asked for.' },
193
+ events: { eyebrow: 'Appearances', title: 'Appearances & collabs', lead: "Fandom, pop history and why Affirmation still slaps: I'll talk about it anywhere with a microphone." },
194
+ organizers: { eyebrow: 'The team', title: 'Organizers', lead: 'It is just me here.' },
195
+ speakers: { eyebrow: 'Speakers', title: 'Speakers', lead: 'Everyone who has taken the mic at one of our gatherings.' },
196
+ venues: { eyebrow: 'Venues', title: 'Venues', lead: 'The rooms that host us.' },
197
+ };
198
+
199
+ export const HOME = {
200
+ hero: {
201
+ eyebrow: "Truly · Madly · Deeply",
202
+ title: "Hi, I'm Riley: full-time Darren Hayes superfan",
203
+ lead: "Writer, vinyl collector, occasional conference speaker, and the person your friends warned you about if you mention Savage Garden within earshot. This is my corner of the internet.",
204
+ image: '/images/hero.svg',
205
+ ctas: [
206
+ { label: 'About me', url: '/about/', icon: 'fa-solid fa-heart', variant: 'primary' },
207
+ { label: 'Read the news', url: '/blog/', variant: 'outline' },
208
+ ],
209
+ },
210
+ stats: [{ value: "1997", label: "fan since" }, { value: "27", label: "concerts attended" }, { value: "2", label: "cassette copies of Affirmation" }, { value: "5", label: "karaoke trophies" }],
211
+ featuresHead: { eyebrow: 'What I do here', title: "One person, three hobbies, one discography", lead: 'The site is personal; the enthusiasm is universal.' },
212
+ features: [
213
+ { icon: "fa-solid fa-pen-nib", title: "Write", body: "News updates, concert diaries and essays on two decades of pop history." },
214
+ { icon: "fa-solid fa-record-vinyl", title: "Collect", body: "Vinyl, cassettes, tour programmes, and one very treasured signed setlist." },
215
+ { icon: "fa-solid fa-microphone-lines", title: "Talk", body: "Panels and podcasts about fandom, nostalgia and why b-sides matter." },
216
+ ],
217
+ testimonialsHead: { eyebrow: 'Kind words', title: 'What people say about the blog' },
218
+ testimonials: [
219
+ { quote: "Riley once explained the entire Savage Garden discography to me at a bus stop. I missed my bus on purpose.", name: "Priya", role: "Friend, converted fan" },
220
+ { quote: "The listening guide got me from zero to crying at Two Beds and a Coffee Machine in a weekend.", name: "Marcus", role: "Reader" },
221
+ { quote: "I came for the vinyl photos and stayed for the footnotes.", name: "June", role: "Newsletter subscriber" },
222
+ ],
223
+ getInvolved: {
224
+ eyebrow: 'Say hi',
225
+ title: "Tell me your favourite b-side",
226
+ lead: "Invite me to your podcast, trade vinyl doubles, or just argue amiably about track sequencing.",
227
+ ctas: [
228
+ { label: 'Email me', url: 'mailto:hello@example.com', variant: 'primary' },
229
+ { label: 'Upcoming appearances', url: '/events/', variant: 'outline' },
230
+ ],
231
+ },
232
+ };
233
+
234
+ /** Demo-only switcher bar. Adopters: set to null (or delete the demo bar usage). */
235
+ export const DEMO_BAR = null;
@@ -0,0 +1,13 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 900" role="img" aria-label="A gold bar chart ranking five eras, the tallest crowned with a star">
2
+ <rect width="1600" height="900" fill="#0F1626"/>
3
+ <g fill="#C3A364">
4
+ <rect x="300" y="480" width="140" height="270" rx="14" opacity="0.55"/>
5
+ <rect x="520" y="380" width="140" height="370" rx="14" opacity="0.7"/>
6
+ <rect x="740" y="250" width="140" height="500" rx="14"/>
7
+ <rect x="960" y="420" width="140" height="330" rx="14" opacity="0.7"/>
8
+ <rect x="1180" y="540" width="140" height="210" rx="14" opacity="0.55"/>
9
+ </g>
10
+ <path fill="#F3E5AB" d="M810,120 L826,164 L873,166 L836,195 L849,240 L810,214 L771,240 L784,195 L747,166 L794,164 Z"/>
11
+ <path d="M240,750 L1380,750" stroke="#26304A" stroke-width="4"/>
12
+ <circle cx="220" cy="180" r="3" fill="#F3E5AB"/><circle cx="1400" cy="240" r="3.5" fill="#F3E5AB"/><circle cx="1300" cy="130" r="2.5" fill="#F3E5AB"/>
13
+ </svg>