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,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. Lucky Town Foodie Club 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
+ Lucky Town Foodie Club 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: "Cook with us"
3
+ eyebrow: "Call for cooks"
4
+ lead: "Got a dish, a technique, or a story to share? We would love to have you lead a night."
5
+ ---
6
+
7
+ You do not need to be a professional, and your dish does not need to be fancy. Some of our best nights came from someone showing us the one thing they make really well.
8
+
9
+ ## What we look for
10
+
11
+ Something you are excited to share: a family recipe, a technique, a cheap-and-cheerful weeknight win. First-time demos are especially welcome.
12
+
13
+ ## Quick demos welcome
14
+
15
+ Not ready for a full session? A ten-minute "here is how I do this" is a great way to dip a toe in.
16
+
17
+ ## We will help you prep
18
+
19
+ Tell us roughly what you want to cover and an organizer will help you plan the shopping, the timing, and the kit. You will not be figuring it out alone.
20
+
21
+ ## Put your hand up
22
+
23
+ Send us your idea through our [sign-up form](https://example.com/cfp), or [say hi 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 night? Here is everything you need to feel at home before you walk in, with or without a dish."
5
+ ---
6
+
7
+ New faces are the whole point. You do not need to be a good cook, and you do not need to bring anything, come hungry and curious.
8
+
9
+ ## What a typical night looks like
10
+
11
+ We spread everything out on the big table, do quick hellos, then eat and talk for as long as the plates hold out. Sometimes there is a short demo, always there are seconds.
12
+
13
+ ## Bring a dish, or don't
14
+
15
+ A pot of something is welcome but never required. Plenty of people come empty-handed their first few times and just help wash up. That counts.
16
+
17
+ ## Who to look for on arrival
18
+
19
+ Find an organizer near the kitchen, they are expecting you and happy to introduce you around. If you are not sure who that is, ask anyone stirring something.
20
+
21
+ ## You can just eat
22
+
23
+ There is no pressure to cook, present, or know your way around a chef's knife. Watching, and eating, from the side is a completely normal way to start.
24
+
25
+ When you are ready for more, [say hi in the chat](https://example.com/chat).
File without changes
File without changes
@@ -0,0 +1,226 @@
1
+ /** Popular: theme configuration (KDrama Fan Club demo). See README for all options. */
2
+
3
+ export const SITE = {
4
+ title: "KDrama Fan Club",
5
+ tagline: "A fictional fan club, demo content for the Popular theme",
6
+ description: "A fan club for K-drama lovers, new and obsessed. (This is a made-up club, example content demonstrating the Popular theme.)",
7
+ brandName: "KDrama",
8
+ brandSub: "Fan 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
+ // Enable the /talks/ archive of past-event recordings and slides.
15
+ talks: true,
16
+ // Append the "Your name here?" invite card to the speakers list, linking to
17
+ // /speak/.
18
+ speakers: { invite: true },
19
+ };
20
+
21
+ /* UI strings. Translate your site by editing these values; keys map 1:1 to
22
+ the Hugo theme's i18n/en.toml (see PARITY.md). */
23
+ export const STRINGS: Record<string, string> = {
24
+ skipToContent: 'Skip to content',
25
+ primaryNav: 'Primary',
26
+ toggleMenu: 'Toggle menu',
27
+ nextMeetup: 'Next meetup',
28
+ venueTba: 'Venue to be announced',
29
+ eventCancelled: 'Cancelled',
30
+ rsvp: 'RSVP',
31
+ rsvpExternal: 'RSVP on Luma',
32
+ allEvents: 'All events',
33
+ allSpeakers: 'All speakers',
34
+ allVenues: 'All venues',
35
+ allOrganizers: 'All organizers',
36
+ comingUp: 'Coming up',
37
+ upcomingEvents: 'Upcoming events',
38
+ upcomingLead: 'Save your seat early, space is limited and our rooms fill up.',
39
+ noUpcomingEvents: 'Nothing on the calendar right now, follow us to hear when the next one lands.',
40
+ lookingBack: 'Looking back',
41
+ pastEvents: 'Past events',
42
+ venueWanted: 'Venue wanted',
43
+ confirmed: 'Confirmed',
44
+ fromTheBlog: 'From the blog',
45
+ latestFromCommunity: 'Latest from our community',
46
+ readTheBlog: 'Read the blog',
47
+ allPosts: 'All posts',
48
+ filterLabel: 'Filter:',
49
+ filterAll: 'All',
50
+ subscribeRss: 'Subscribe via RSS',
51
+ subscribeCalendar: 'Subscribe to calendar',
52
+ watchRecording: 'Watch',
53
+ viewSlides: 'Slides',
54
+ hasRecording: 'Recording available',
55
+ talks: 'Talks',
56
+ talksLead: 'Every talk from our past events, with recordings and slides where we have them.',
57
+ learnMore: 'Learn more',
58
+ joinChat: 'Join the chat',
59
+ speakerInviteTitle: 'Your name here?',
60
+ speakerInviteBody: 'We are always looking for new voices. Lightning talks welcome, and we will help you prepare.',
61
+ subscribeRssTitle: 'Follow new posts in any feed reader',
62
+ noPosts: 'No posts yet, check back soon.',
63
+ ourSpeaker: 'Our speaker',
64
+ minRead: '{n} min read',
65
+ authorsBy: 'By',
66
+ listSeparator: ', ',
67
+ listSeparatorFinal: ' & ',
68
+ posts: 'Posts',
69
+ guest: 'Guest',
70
+ website: 'Website',
71
+ previewLabel: 'Preview',
72
+ previewBanner: 'This is a preview. Nothing here is published yet.',
73
+ checklist: 'Checklist',
74
+ copyCode: 'Copy code',
75
+ checklistDone: 'done',
76
+ writtenBy: 'Written by {name}',
77
+ eyebrowBlog: 'Blog',
78
+ eyebrowEvents: 'Events',
79
+ eyebrowAuthor: 'Author',
80
+ eyebrowDocs: 'Docs',
81
+ eyebrowTag: 'Tag',
82
+ taggedCount: '{n} post(s) tagged {tag}',
83
+ speakers: 'Speakers',
84
+ eyebrowSpeaker: 'Speaker',
85
+ eyebrowOrganizer: 'Organizer',
86
+ sessionsBy: 'Sessions by {name}',
87
+ eyebrowVenue: 'Venue',
88
+ gettingThere: 'Getting there & access',
89
+ wheelchairAccessible: 'Wheelchair accessible',
90
+ transit: 'Transit',
91
+ parking: 'Parking',
92
+ venueEvents: 'Events held here',
93
+ beforeYouArrive: 'Before you arrive',
94
+ postNavigation: 'More posts',
95
+ newerPost: 'Newer post',
96
+ olderPost: 'Older post',
97
+ paginationLabel: 'Pagination',
98
+ paginationPrev: 'Previous',
99
+ paginationNext: 'Next',
100
+ };
101
+
102
+ /* List pagination size. Mirrors Hugo's [pagination] pagerSize (see PARITY.md). */
103
+ export const PAGINATION = { pageSize: 3 };
104
+
105
+ /* Renameable content sections: point post-author bylines or the homepage
106
+ team grid at a differently-named collection (must exist in your
107
+ content.config.ts). Defaults are the theme's own section names.
108
+ Hugo parity: [params.sections] (see PARITY.md). */
109
+ export const SECTIONS_MAP = {
110
+ authors: 'authors',
111
+ team: 'organizers',
112
+ };
113
+
114
+ export const BRAND: Record<string, string> = {
115
+ primary: "#4f46e5",
116
+ primaryHover: "#4338ca",
117
+ primaryActive: "#3730a3",
118
+ secondary: "#3730a3",
119
+ accent: "#b45309",
120
+ ink: '#142a36',
121
+ surfaceWash: "#e2e4f7",
122
+ surfaceWashSoft: "#f0f1fb",
123
+ surfaceInk: '#142a36',
124
+ fontSans: 'Inter, system-ui, sans-serif',
125
+ fontDisplay: 'Quantico, Inter, sans-serif',
126
+ };
127
+
128
+ export const NAV: {
129
+ label: string;
130
+ href: string;
131
+ children?: { label: string; href: string }[];
132
+ }[] = [
133
+ {
134
+ label: 'About',
135
+ href: '/about/',
136
+ children: [
137
+ { label: 'About us', href: '/about/' },
138
+ { label: 'Organizers', href: '/organizers/' },
139
+ ],
140
+ },
141
+ { label: 'Blog', href: '/blog/' },
142
+ { label: 'Events', href: '/events/' },
143
+ { label: 'Talks', href: '/talks/' },
144
+ { label: 'Speak with us', href: '/speak/' },
145
+ { label: 'Handbook', href: '/handbook/' },
146
+ ];
147
+
148
+ export const CTA = { label: 'RSVP', url: 'https://example.com/rsvp', icon: 'fa-solid fa-calendar' };
149
+
150
+ export const SOCIAL = [
151
+ { label: 'Instagram', icon: 'fa-brands fa-instagram', url: 'https://example.com' },
152
+ { label: 'Mastodon', icon: 'fa-brands fa-mastodon', url: 'https://example.com' },
153
+ { label: 'RSS', icon: 'fa-solid fa-rss', url: '/rss.xml' },
154
+ { label: 'Email', icon: 'fa-solid fa-envelope', url: 'mailto:hello@example.com' },
155
+ ];
156
+
157
+ export const FOOTER = {
158
+ tagline: "Watch · Swoon · Debate, an Astro demo site for the Popular theme",
159
+ credit: { label: 'Popular. An Astro theme by Mariatta.', url: 'https://popular.mariatta.ca/' },
160
+ columns: [
161
+ { title: 'Community', links: [
162
+ { label: 'About us', href: '/about/' },
163
+ { label: 'Blog', href: '/blog/' },
164
+ { label: 'Code of Conduct', href: '/code-of-conduct/' },
165
+ ]},
166
+ { title: 'Get involved', links: [
167
+ { label: 'Host a session', href: '/get-involved/' },
168
+ { label: 'Offer a venue', href: '/get-involved/' },
169
+ { label: 'Organizers', href: '/organizers/' },
170
+ ]},
171
+ { title: 'Organizers', links: [
172
+ { label: 'Organizer Handbook', href: '/handbook/' },
173
+ { label: 'Meetup Runbooks', href: '/runbooks/' },
174
+ ]},
175
+ ],
176
+ };
177
+
178
+ /** Support box at the bottom of blog posts, null hides it. */
179
+ export const SUPPORT = null;
180
+
181
+ /** Section list-page headers. */
182
+ export const SECTIONS = {
183
+ blog: { eyebrow: 'Blog', title: 'From our community', lead: "Recaps and spotlights from KDrama Fan Club, example posts showing the theme's blog." },
184
+ events: { eyebrow: 'Events', title: 'Upcoming gatherings & announcements', lead: 'All events are free, and newcomers are always welcome.' },
185
+ organizers: { eyebrow: 'The team', title: 'Organizers', lead: "KDrama Fan Club is run entirely by volunteers. Want to help? We'd love to have you." },
186
+ speakers: { eyebrow: 'Speakers', title: 'Speakers', lead: 'Everyone who has taken the mic (or the quiz cards) at one of our nights.' },
187
+ venues: { eyebrow: 'Venues', title: 'Venues', lead: 'The rooms (and screens) that host us.' },
188
+ };
189
+
190
+ export const HOME = {
191
+ hero: {
192
+ eyebrow: "Watch · Swoon · Debate",
193
+ title: "A fan club for K-drama lovers, new and obsessed",
194
+ lead: "Watch parties, trivia nights and OST singalongs. Whether you've seen every episode of Vincenzo twice or you're wondering where to start, we saved you a seat.",
195
+ image: '/images/hero.png',
196
+ ctas: [
197
+ { label: 'RSVP', url: 'https://example.com/rsvp', icon: 'fa-solid fa-calendar', variant: 'primary' },
198
+ { label: 'About us', url: '/about/', variant: 'outline' },
199
+ ],
200
+ },
201
+ stats: [{ value: "2021", label: "club founded" }, { value: "All", label: "fans welcome" }, { value: "Free", label: "to attend" }, { value: "Monthly", label: "watch parties" }],
202
+ featuresHead: { eyebrow: 'What we do', title: "What KDrama Fan Club is all about", lead: 'No experience necessary, come as you are.' },
203
+ features: [
204
+ { icon: "fa-solid fa-tv", title: "Watch parties", body: "Big screen, subtitles on, communal gasping encouraged. We pick a series and watch the openers together." },
205
+ { icon: "fa-solid fa-circle-question", title: "Trivia nights", body: "From courtroom scenes to whale facts, test your knowledge of the dramas we all pretend we didn't binge in one weekend." },
206
+ { icon: "fa-solid fa-music", title: "OST nights & karaoke", body: "The soundtracks deserve their own evening. Bring your ballad voice." },
207
+ ],
208
+ testimonialsHead: { eyebrow: 'Kind words', title: 'What members say' },
209
+ testimonials: [
210
+ { quote: "I showed up alone to my first watch party. By the finale I had a whole couch.", name: "Dani", role: "Watch-party regular" },
211
+ { quote: "Trivia night taught me more about whales than school ever did.", name: "Sam", role: "Team Whale Facts" },
212
+ { quote: "I've cried in public four times this year. Highly recommend.", name: "Mina", role: "Ballad enthusiast" },
213
+ ],
214
+ getInvolved: {
215
+ eyebrow: 'Community',
216
+ title: "Come for one episode, stay for sixteen",
217
+ lead: "Host a watch party, suggest a series, or offer us a screening room.",
218
+ ctas: [
219
+ { label: 'Get involved', url: '/get-involved/', variant: 'primary' },
220
+ { label: 'Read the handbook', url: '/handbook/', variant: 'outline' },
221
+ ],
222
+ },
223
+ };
224
+
225
+ /** Demo-only switcher bar. Adopters: set to null (or delete the demo bar usage). */
226
+ export const DEMO_BAR = null;
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: "Hana Kim"
3
+ role: "Lead organizer"
4
+ photo: "/images/organizer-1.png"
5
+ bio: "Curates the watch-party calendar and writes the spoiler policy. Will make you a starter list on request."
6
+ website: "https://example.com"
7
+ ---
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Trivia recap: whales, law, and Extraordinary Attorney Woo"
3
+ date: 2026-04-17
4
+ author: "Priya"
5
+ description: "Team Gimbap takes the crown, and the whale-fact tiebreaker."
6
+ image: "/images/post-2.png"
7
+ tags: ["trivia", "recap"]
8
+ ---
9
+
10
+ Five teams, fifty questions, and a tiebreaker that came down to cetacean trivia, exactly as the show would have wanted.
11
+
12
+ Congratulations to Team Gimbap, whose victory lap included a spot-on revolving-door demonstration.
13
+
14
+ The full question set is in the club chat for anyone who wants a rematch at home.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Castaway Diva finale: feelings, tissues, and one big singalong"
3
+ date: 2026-05-12
4
+ author: "Hana"
5
+ description: "Our loudest, teariest watch party to date."
6
+ image: "/images/post-3.png"
7
+ tags: ["watch-party", "recap"]
8
+ ---
9
+
10
+ We knew the finale would get us. We did not know the whole room would sing.
11
+
12
+ Thank you to everyone who brought snacks, tissues and their whole heart. Special shout-out to the member who made playlist cards for everyone to take home.
13
+
14
+ Where this show ranks in our all-time list is now the club's most contested debate, bring your arguments to the next social.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Crush (1988 me): the night Reply 1988 took the club hostage"
3
+ date: 2026-03-20
4
+ authors: ["hana"]
5
+ description: "One neighbourhood, five families, and a whole club arguing about first loves."
6
+ image: "/images/post-3.png"
7
+ tags: ["watch-party", "recap"]
8
+ ---
9
+
10
+ We put on episode one of Reply 1988 "just to see the opening". Three hours later nobody had moved, and someone had adopted the entire Ssangmun-dong neighbourhood as their own family.
11
+
12
+ The first-crush debate got serious fast: hands were raised, sides were chosen, and the Junghwan vs. Taek question has been tabled for its own dedicated meetup because we ran out of evening before we ran out of opinions.
13
+
14
+ If you missed it: we're continuing with two episodes a week, the snack roster is in the club chat, and yes, 1988 you would have had a crush too.
@@ -0,0 +1,24 @@
1
+ ---
2
+ title: "OST karaoke night in photos"
3
+ date: 2026-06-30
4
+ authors: ["hana"]
5
+ description: "The brave, the ballads and the group finale: karaoke night in pictures."
6
+ image: "/images/post-2.png"
7
+ tags: ["recap", "photos", "community"]
8
+ ---
9
+
10
+ import Gallery from 'astro-theme-popular/components/Gallery.astro';
11
+ import Photo from 'astro-theme-popular/components/Photo.astro';
12
+ import Pullquote from 'astro-theme-popular/components/Pullquote.astro';
13
+
14
+ Listening first, then the brave took the mic. Here is [OST karaoke night](/events/ost-karaoke/), in pictures.
15
+
16
+ <Gallery>
17
+ <Photo src="/images/post-1.png" alt="The room during the opening ballad, lights low" caption="Lights down for the opening ballad." />
18
+ <Photo src="/images/post-2.png" alt="A member mid-performance at the mic" caption="A first-timer taking on a Goblin OST." />
19
+ <Photo src="/images/post-3.png" alt="The whole group on their feet for the finale" caption="The finale: everyone up, nobody on key." />
20
+ </Gallery>
21
+
22
+ <Pullquote cite="A first-time singer">I came to watch and left having sung a duet. No regrets.</Pullquote>
23
+
24
+ Thanks to everyone who sang, swayed, or held a phone light. Photos we missed? Send them over and we will add them to the album.
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "Watch party recap: Vincenzo, and a room full of new fans"
3
+ date: 2026-06-20
4
+ authors: ["hana"]
5
+ description: "Two episodes in, half the room had already planned their weekend binge."
6
+ image: "/images/post-1.png"
7
+ tags: ["watch-party", "recap"]
8
+ ---
9
+
10
+ We introduced twelve newcomers to Vincenzo and by the end of episode two, every one of them was asking how many episodes were left, the good version of that question.
11
+
12
+ The communal gasp at the end of episode one remains one of our all-time top five club moments.
13
+
14
+ Next up in the rewatch calendar: your nominations, due at trivia night.
@@ -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 KDrama Fan 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>