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,221 @@
1
+ /** Popular: theme configuration (Lucky Town Foodie Club demo). See README for all options. */
2
+
3
+ export const SITE = {
4
+ title: "Lucky Town Foodie Club",
5
+ tagline: "A fictional foodie club, demo content for the Popular theme",
6
+ description: "Neighbours who cook, eat and share in Lucky Town. (Lucky Town is a made-up place, this is example content demonstrating the Popular theme.)",
7
+ brandName: "Lucky Town",
8
+ brandSub: "Foodie Club",
9
+ logo: '/images/logo.png',
10
+ favicon: '/images/logo.png',
11
+ ogImage: '/images/hero.png',
12
+ locale: 'en-US',
13
+ landAcknowledgement: "Add your community's land acknowledgement or welcome statement here, this demo keeps it as a placeholder.",
14
+ };
15
+
16
+ /* UI strings. Translate your site by editing these values; keys map 1:1 to
17
+ the Hugo theme's i18n/en.toml (see PARITY.md). */
18
+ export const STRINGS: Record<string, string> = {
19
+ skipToContent: 'Skip to content',
20
+ primaryNav: 'Primary',
21
+ toggleMenu: 'Toggle menu',
22
+ nextMeetup: 'Next meetup',
23
+ venueTba: 'Venue to be announced',
24
+ eventCancelled: 'Cancelled',
25
+ rsvp: 'RSVP',
26
+ rsvpExternal: 'RSVP on Luma',
27
+ allEvents: 'All events',
28
+ allSpeakers: 'All speakers',
29
+ allVenues: 'All venues',
30
+ allOrganizers: 'All organizers',
31
+ comingUp: 'Coming up',
32
+ upcomingEvents: 'Upcoming events',
33
+ upcomingLead: 'Save your seat early, space is limited and our rooms fill up.',
34
+ noUpcomingEvents: 'Nothing on the calendar right now, follow us to hear when the next one lands.',
35
+ lookingBack: 'Looking back',
36
+ pastEvents: 'Past events',
37
+ venueWanted: 'Venue wanted',
38
+ confirmed: 'Confirmed',
39
+ fromTheBlog: 'From the blog',
40
+ latestFromCommunity: 'Latest from our community',
41
+ readTheBlog: 'Read the blog',
42
+ allPosts: 'All posts',
43
+ filterLabel: 'Filter:',
44
+ filterAll: 'All',
45
+ subscribeRss: 'Subscribe via RSS',
46
+ subscribeCalendar: 'Subscribe to calendar',
47
+ watchRecording: 'Watch',
48
+ viewSlides: 'Slides',
49
+ hasRecording: 'Recording available',
50
+ talks: 'Talks',
51
+ talksLead: 'Every talk from our past events, with recordings and slides where we have them.',
52
+ learnMore: 'Learn more',
53
+ joinChat: 'Join the chat',
54
+ speakerInviteTitle: 'Your name here?',
55
+ speakerInviteBody: 'We are always looking for new voices. Lightning talks welcome, and we will help you prepare.',
56
+ subscribeRssTitle: 'Follow new posts in any feed reader',
57
+ noPosts: 'No posts yet, check back soon.',
58
+ ourSpeaker: 'Our speaker',
59
+ minRead: '{n} min read',
60
+ authorsBy: 'By',
61
+ listSeparator: ', ',
62
+ listSeparatorFinal: ' & ',
63
+ posts: 'Posts',
64
+ guest: 'Guest',
65
+ website: 'Website',
66
+ previewLabel: 'Preview',
67
+ previewBanner: 'This is a preview. Nothing here is published yet.',
68
+ checklist: 'Checklist',
69
+ copyCode: 'Copy code',
70
+ checklistDone: 'done',
71
+ writtenBy: 'Written by {name}',
72
+ eyebrowBlog: 'Blog',
73
+ eyebrowEvents: 'Events',
74
+ eyebrowAuthor: 'Author',
75
+ eyebrowDocs: 'Docs',
76
+ eyebrowTag: 'Tag',
77
+ taggedCount: '{n} post(s) tagged {tag}',
78
+ speakers: 'Speakers',
79
+ eyebrowSpeaker: 'Speaker',
80
+ eyebrowOrganizer: 'Organizer',
81
+ sessionsBy: 'Sessions by {name}',
82
+ eyebrowVenue: 'Venue',
83
+ gettingThere: 'Getting there & access',
84
+ wheelchairAccessible: 'Wheelchair accessible',
85
+ transit: 'Transit',
86
+ parking: 'Parking',
87
+ venueEvents: 'Events held here',
88
+ beforeYouArrive: 'Before you arrive',
89
+ postNavigation: 'More posts',
90
+ newerPost: 'Newer post',
91
+ olderPost: 'Older post',
92
+ paginationLabel: 'Pagination',
93
+ paginationPrev: 'Previous',
94
+ paginationNext: 'Next',
95
+ };
96
+
97
+ /* List pagination size. Mirrors Hugo's [pagination] pagerSize (see PARITY.md). */
98
+ export const PAGINATION = { pageSize: 3 };
99
+
100
+ /* Renameable content sections: point post-author bylines or the homepage
101
+ team grid at a differently-named collection (must exist in your
102
+ content.config.ts). Defaults are the theme's own section names.
103
+ Hugo parity: [params.sections] (see PARITY.md). */
104
+ export const SECTIONS_MAP = {
105
+ authors: 'authors',
106
+ team: 'organizers',
107
+ };
108
+
109
+ export const BRAND: Record<string, string> = {
110
+ primary: "#b45309",
111
+ primaryHover: "#92400e",
112
+ primaryActive: "#7c2d12",
113
+ secondary: "#7c2d12",
114
+ accent: "#0f766e",
115
+ ink: '#142a36',
116
+ surfaceWash: "#efe7dd",
117
+ surfaceWashSoft: "#f8f3ec",
118
+ surfaceInk: '#142a36',
119
+ fontSans: 'Inter, system-ui, sans-serif',
120
+ fontDisplay: 'Quantico, Inter, sans-serif',
121
+ };
122
+
123
+ export const NAV: {
124
+ label: string;
125
+ href: string;
126
+ children?: { label: string; href: string }[];
127
+ }[] = [
128
+ { label: 'Start here', href: '/start/' },
129
+ {
130
+ label: 'About',
131
+ href: '/about/',
132
+ children: [
133
+ { label: 'About us', href: '/about/' },
134
+ { label: 'Organizers', href: '/organizers/' },
135
+ ],
136
+ },
137
+ { label: 'Blog', href: '/blog/' },
138
+ { label: 'Events', href: '/events/' },
139
+ { label: 'Cook with us', href: '/speak/' },
140
+ { label: 'Handbook', href: '/handbook/' },
141
+ ];
142
+
143
+ export const CTA = { label: 'RSVP', url: 'https://example.com/rsvp', icon: 'fa-solid fa-calendar' };
144
+
145
+ export const SOCIAL = [
146
+ { label: 'Instagram', icon: 'fa-brands fa-instagram', url: 'https://example.com' },
147
+ { label: 'Mastodon', icon: 'fa-brands fa-mastodon', url: 'https://example.com' },
148
+ { label: 'RSS', icon: 'fa-solid fa-rss', url: '/rss.xml' },
149
+ { label: 'Email', icon: 'fa-solid fa-envelope', url: 'mailto:hello@example.com' },
150
+ ];
151
+
152
+ export const FOOTER = {
153
+ tagline: "Cook · Eat · Share, an Astro demo site for the Popular theme",
154
+ credit: { label: 'Popular. An Astro theme by Mariatta.', url: 'https://popular.mariatta.ca/' },
155
+ columns: [
156
+ { title: 'Community', links: [
157
+ { label: 'About us', href: '/about/' },
158
+ { label: 'Blog', href: '/blog/' },
159
+ { label: 'Code of Conduct', href: '/code-of-conduct/' },
160
+ ]},
161
+ { title: 'Get involved', links: [
162
+ { label: 'Host a session', href: '/get-involved/' },
163
+ { label: 'Offer a venue', href: '/get-involved/' },
164
+ { label: 'Organizers', href: '/organizers/' },
165
+ ]},
166
+ { title: 'Organizers', links: [
167
+ { label: 'Organizer Handbook', href: '/handbook/' },
168
+ { label: 'Meetup Runbooks', href: '/runbooks/' },
169
+ ]},
170
+ ],
171
+ };
172
+
173
+ /** Support box at the bottom of blog posts, null hides it. */
174
+ export const SUPPORT = null;
175
+
176
+ /** Section list-page headers. */
177
+ export const SECTIONS = {
178
+ blog: { eyebrow: 'Blog', title: 'From our community', lead: "Recaps and spotlights from Lucky Town Foodie Club, example posts showing the theme's blog." },
179
+ events: { eyebrow: 'Events', title: 'Upcoming gatherings & announcements', lead: 'All events are free, and newcomers are always welcome.' },
180
+ organizers: { eyebrow: 'The team', title: 'Organizers', lead: "Lucky Town Foodie Club is run entirely by volunteers. Want to help? We'd love to have you." },
181
+ speakers: { eyebrow: 'Speakers', title: 'Speakers', lead: 'Everyone who has taken the mic at one of our gatherings.' },
182
+ venues: { eyebrow: 'Venues', title: 'Venues', lead: 'The rooms that host us.' },
183
+ };
184
+
185
+ export const HOME = {
186
+ hero: {
187
+ eyebrow: "Cook · Eat · Share",
188
+ title: "Neighbours who cook, eat and share",
189
+ lead: "Lucky Town Foodie Club is a home for everyone who plans their day around meals. We cook together, crawl the city's best dessert counters, and argue lovingly about poutine.",
190
+ image: '/images/hero.png',
191
+ ctas: [
192
+ { label: 'RSVP', url: 'https://example.com/rsvp', icon: 'fa-solid fa-calendar', variant: 'primary' },
193
+ { label: 'About us', url: '/about/', variant: 'outline' },
194
+ ],
195
+ },
196
+ stats: [{ value: "2019", label: "club founded" }, { value: "All", label: "appetites welcome" }, { value: "Free", label: "to attend" }, { value: "Monthly", label: "dinners in Lucky Town" }],
197
+ featuresHead: { eyebrow: 'What we do', title: "What Lucky Town Foodie Club is all about", lead: 'No experience necessary, come as you are.' },
198
+ features: [
199
+ { icon: "fa-solid fa-utensils", title: "Cooking nights", body: "Hands-on evenings where everyone leaves with flour on their shirt and a container of leftovers." },
200
+ { icon: "fa-solid fa-ice-cream", title: "Food crawls", body: "Guided wanders through dessert counters, dumpling windows and the occasional legendary food truck." },
201
+ { icon: "fa-solid fa-bowl-food", title: "Potlucks & cook-offs", body: "Bring a dish, defend your recipe. The great poutine cook-off is our unofficial championship." },
202
+ ],
203
+ testimonialsHead: { eyebrow: 'Kind words', title: 'What members say' },
204
+ testimonials: [
205
+ { quote: "I came for the potluck and stayed for the people. Also the potluck.", name: "Marisol", role: "Member since the first cook-off" },
206
+ { quote: "My sourdough has a fan club now. I'm mostly fine with being the plus-one.", name: "Theo", role: "Bread person" },
207
+ { quote: "Three cooking nights in and I finally own a rolling pin. Growth.", name: "June", role: "Newest member" },
208
+ ],
209
+ getInvolved: {
210
+ eyebrow: 'Community',
211
+ title: "Pull up a chair",
212
+ lead: "Host a cooking night, offer a kitchen, or just bring your appetite.",
213
+ ctas: [
214
+ { label: 'Get involved', url: '/get-involved/', variant: 'primary' },
215
+ { label: 'Read the handbook', url: '/handbook/', variant: 'outline' },
216
+ ],
217
+ },
218
+ };
219
+
220
+ /** Demo-only switcher bar. Adopters: set to null (or delete the demo bar usage). */
221
+ export const DEMO_BAR = null;
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: "Sofia Bianchi"
3
+ role: "Lead organizer"
4
+ photo: "/images/organizer-1.png"
5
+ bio: "Founded the club after one too many solo lasagnas. Keeps the calendar full and the kitchen calm."
6
+ website: "https://example.com"
7
+ ---
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Dessert crawl photo diary"
3
+ date: 2026-03-15
4
+ author: "Sofia"
5
+ description: "Five stops through the city's best sweets, in pictures."
6
+ image: "/images/post-3.png"
7
+ tags: ["crawl", "dessert"]
8
+ ---
9
+
10
+ Twelve members, five dessert stops, one shared conclusion: there is always room for one more bite.
11
+
12
+ The ube soft-serve won the day by unanimous silence, the kind that only happens when everyone's too busy eating to talk.
13
+
14
+ Route notes and recommendations are in the club chat for anyone doing the crawl solo.
@@ -0,0 +1,15 @@
1
+ ---
2
+ title: "Ice cream selfie flash mob: the photo"
3
+ date: 2026-05-09
4
+ authors: ["sofia"]
5
+ description: "Sixty photogenic seconds at Fountain Plaza: a crowd of cones, one enormous group selfie, then everyone vanished back into their Saturday."
6
+ image: "/images/post-2.png"
7
+ tags: ["photos", "social"]
8
+ ---
9
+
10
+ The rules were simple: appear at the fountain by 12:55 with an ice cream (cone strongly encouraged, cup tolerated), raise it at 1:00 for one enormous group selfie, and by 1:15 pretend it never happened.
11
+
12
+ ![The group selfie at Fountain Plaza](/images/post-2.png)
13
+ *A plaza full of cones, zero melted casualties, one very confused dog walker.*
14
+
15
+ Rumours of a sequel are true. Keep an eye on the events page, the crawl crew is already scouting the next backdrop.
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: "Pierogi night in photos"
3
+ date: 2026-06-30
4
+ authors: ["sofia"]
5
+ description: "Flour everywhere, zero regrets: the pierogi workshop in pictures."
6
+ image: "/images/post-2.png"
7
+ tags: ["photos", "community"]
8
+ ---
9
+
10
+ Twelve dozen pierogi, one very forgiving kitchen. Here is what pierogi night looked like from behind the flour cloud.
11
+
12
+ ![Rolling dough at the long table](/images/post-1.png)
13
+ *The long table mid-session: rolling pins out, aprons on, technique debates already underway.*
14
+
15
+ ![Trays of folded pierogi](/images/post-2.png)
16
+ *Two trays in and the folds were finally holding. Mostly.*
17
+
18
+ ![The tasting at the end of the night](/images/post-3.png)
19
+ *The part everyone actually came for: butter, onions, and the tasting line.*
20
+
21
+ Thanks to everyone who stayed for cleanup. If you snapped photos we missed, send them over and we will add them to the album.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: "The great poutine debate: curds matter"
3
+ date: 2026-04-28
4
+ author: "Marcus"
5
+ description: "A field report from our most passionate discussion night."
6
+ image: "/images/post-2.png"
7
+ tags: ["community", "potluck"]
8
+ ---
9
+
10
+ What began as a casual dinner turned into a ninety-minute symposium on squeak. Our conclusions: fresh curds are non-negotiable, gravy thickness is a personality trait, and fries must survive the sauce.
11
+
12
+ The cook-off in September will settle nothing, and we can't wait.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Two Breads and a Coffee Machine: bake-and-brew recap"
3
+ date: 2026-05-30
4
+ authors: ["sofia"]
5
+ description: "Crusty loaves, pour-overs and strongly held butter opinions, our slowest and coziest morning yet."
6
+ image: "/images/post-2.png"
7
+ tags: ["hands-on", "social"]
8
+ ---
9
+
10
+ The premise was simple: everyone brings two breads, the club brings the coffee machine.
11
+
12
+ Eighteen loaves showed up: sourdoughs with serious ears, a chocolate babka that never stood a chance, and one heroic first-ever ciabatta. The coffee machine hissed along bravely until the pour-over table stole its audience.
13
+
14
+ The butter tasting settled nothing (salted still rules, cultured is catching up fast), and the crumb-shot photo wall is already pinned in the club chat. Same time next spring, and yes, the babka baker has been asked for the recipe.
@@ -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 Lucky Town Foodie Club. 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,14 @@
1
+ ---
2
+ title: "Ice cream & dessert crawl"
3
+ date: 2026-08-25
4
+ description: "Five stops, one afternoon, zero regrets. We meet at the market entrance and follow the sugar."
5
+ image: "/images/post-2.png"
6
+ tags: ["crawl", "dessert"]
7
+ time: "2:00 PM – 5:00 PM"
8
+ venue: "Granville Island Public Market"
9
+ address: "1669 Johnston St, Vancouver"
10
+ speaker: "A guided sugar pilgrimage"
11
+ rsvp: "https://example.com/rsvp"
12
+ ---
13
+
14
+ Five stops, one afternoon, zero regrets. We meet at the market entrance and follow the sugar.
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: "Pierogi-making night"
3
+ date: 2026-07-28
4
+ description: "Fold, pinch, boil, fry. We'll make a few hundred pierogis together and eat an alarming number of them on the spot."
5
+ image: "/images/post-1.png"
6
+ tags: ["hands-on", "cooking"]
7
+ time: "6:00 PM – 9:00 PM"
8
+ venue: "Lucky Town Community Kitchen"
9
+ address: "7 Butter Lane, Lucky Town"
10
+ speaker: "Led by our resident pierogi grandmother-in-training"
11
+ checkin: "Bring your RSVP confirmation and an apron; loaner aprons run out fast."
12
+ venueNotes: "Side entrance on Butter Lane: buzz 12 and come up to the teaching kitchen."
13
+ rsvp: "https://example.com/rsvp"
14
+ ---
15
+
16
+ Fold, pinch, boil, fry. We'll make a few hundred pierogis together and eat an alarming number of them on the spot.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "The great poutine cook-off"
3
+ date: 2026-09-22
4
+ description: "Classic, butter chicken, veggie-gravy heresy, all styles welcome. Judged by blind tasting and loud opinions."
5
+ image: "/images/post-3.png"
6
+ tags: ["cook-off", "potluck"]
7
+ time: "6:00 PM – 8:30 PM"
8
+ venueWanted: true
9
+ address: "Venue host wanted: get in touch!"
10
+ speaker: "Bring your curds and your courage"
11
+ rsvp: "https://example.com/rsvp"
12
+ ---
13
+
14
+ Classic, butter chicken, veggie-gravy heresy, all styles welcome. Judged by blind tasting and loud opinions.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Summer potluck in the park"
3
+ date: 2026-05-24
4
+ description: "Blankets, frisbees, and forty dishes from forty kitchens. The unofficial start of our summer."
5
+ image: "/images/post-1.png"
6
+ tags: ["potluck", "social"]
7
+ time: "12:00 PM – 3:00 PM"
8
+ venue: "Lucky Town Riverside Park"
9
+ address: "Picnic area B, Lucky Town"
10
+ speaker: "Everyone brings a dish"
11
+ rsvp: "https://example.com/rsvp"
12
+ ---
13
+
14
+ Blankets, frisbees, and forty dishes from forty kitchens. The unofficial start of our summer.
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: "Marcus Chen"
3
+ weight: 20
4
+ role: "Crawls & venues"
5
+ photo: "/images/organizer-2.png"
6
+ description: "Maps our food crawls and sweet-talks kitchens into hosting us. Maintains the sacred restaurant spreadsheet."
7
+ social:
8
+ - label: "Email"
9
+ icon: "fa-solid fa-envelope"
10
+ url: "mailto:hello@example.com"
11
+ ---
12
+
13
+
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: "Sofia Bianchi"
3
+ weight: 10
4
+ role: "Lead organizer"
5
+ photo: "/images/organizer-1.png"
6
+ description: "Founded the club after one too many solo lasagnas. Keeps the calendar full and the kitchen calm."
7
+ social:
8
+ - label: "Email"
9
+ icon: "fa-solid fa-envelope"
10
+ url: "mailto:hello@example.com"
11
+ ---
12
+
13
+
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: "Volunteer with us"
3
+ weight: 30
4
+ role: "This could be you"
5
+ photo: "/images/organizer-3.png"
6
+ description: "We always need more hands, greeting at the door, washing dishes, or scouting the next crawl."
7
+ social:
8
+ - label: "Email"
9
+ icon: "fa-solid fa-envelope"
10
+ url: "mailto:hello@example.com"
11
+ ---
12
+
13
+
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: "About us"
3
+ eyebrow: "About us"
4
+ lead: "A fictional foodie club, demo content for the Popular theme."
5
+ ---
6
+
7
+ import Callout from 'astro-theme-popular/components/Callout.astro';
8
+
9
+ Lucky Town Foodie Club started with six neighbours and one very ambitious lasagna. We're now a monthly gathering for cooks, bakers and enthusiastic eaters of every level.
10
+
11
+ No culinary skills necessary. Chopping onions badly next to someone chopping them well is how everyone here learned.
12
+
13
+ <Callout tone="info" title="This is an Astro demo site">
14
+ Lucky Town Foodie Club is a fictional community, made up to demonstrate the **Popular** Astro theme. Replace this content with your own, every page here is an editable example.
15
+ </Callout>
16
+
17
+ ## Land acknowledgement
18
+
19
+ Add your community's land acknowledgement or welcome statement here, this demo keeps it as a placeholder.
20
+
21
+ <a class="g-btn g-btn--primary" href="https://example.com/rsvp"><i class="fa-solid fa-calendar" aria-hidden="true"></i> RSVP</a>