Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d1a1c41
Separate boise/portland
raymond-devries Jan 26, 2025
0f33dcb
Setup for github backend
raymond-devries Jan 26, 2025
2cccac9
Setup auth for backend
raymond-devries Jan 26, 2025
9ced1d8
Update Boise “index”
raymond-devries Jan 26, 2025
941a7b0
Update Portland “index”
raymond-devries Jan 26, 2025
c6a0dfb
Update Boise “index”
raymond-devries Jan 27, 2025
34dbd00
Revert "Update Boise “index”"
raymond-devries Jan 27, 2025
1029572
Delete “src/lib/content/boise/media/replace-me.png”
CowgillBoise Aug 6, 2025
703fa82
Update Boise “index”
CowgillBoise Aug 6, 2025
255d4ab
Update Boise “meta”
CowgillBoise Nov 8, 2025
0e39576
Update Boise “meta”
CowgillBoise Nov 8, 2025
50186e8
Update Boise “meta”
CowgillBoise Nov 8, 2025
e907636
Update Boise “about”
CowgillBoise Nov 8, 2025
ae24b96
Update Boise “index”
CowgillBoise Nov 8, 2025
d8111e9
Update Boise “about”
CowgillBoise Nov 8, 2025
659d7f2
Update Boise “events”
CowgillBoise Nov 8, 2025
5f72666
Update Boise “contact”
CowgillBoise Nov 8, 2025
9d16d77
Update Boise “contact”
CowgillBoise Nov 8, 2025
2e5e6b6
Update Boise “meta”
CowgillBoise Nov 8, 2025
8c12e50
Merge branch 'master' into content-setup
raymond-devries Feb 2, 2026
408a823
Conditionally show the articles section
raymond-devries Feb 2, 2026
c02db50
Conditionally render the contact page for now
raymond-devries Feb 2, 2026
372dc32
Fix calendar links
raymond-devries Feb 2, 2026
4bb7277
Lint
raymond-devries Feb 2, 2026
ed03145
Merge branch 'master' into content-setup
raymond-devries Feb 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions functions/api/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
export async function onRequest(context) {
const {
request, // same as existing Worker API
env, // same as existing Worker API
params, // if filename includes [id] or [[path]]
waitUntil, // same as ctx.waitUntil in existing Worker API
next, // used for middleware or to fetch assets
data // arbitrary space for passing data between middlewares
} = context;

const client_id = env.GITHUB_CLIENT_ID;

try {
const url = new URL(request.url);
const redirectUrl = new URL('https://github.com/login/oauth/authorize');
redirectUrl.searchParams.set('client_id', client_id);
redirectUrl.searchParams.set('redirect_uri', url.origin + '/api/callback');
redirectUrl.searchParams.set('scope', 'repo user');
redirectUrl.searchParams.set('state', crypto.getRandomValues(new Uint8Array(12)).join(''));
return Response.redirect(redirectUrl.href, 301);
} catch (error) {
console.error(error);
return new Response(error.message, {
status: 500
});
}
}
74 changes: 74 additions & 0 deletions functions/api/callback.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
function renderBody(status, content) {
const html = `
<script>
const receiveMessage = (message) => {
window.opener.postMessage(
'authorization:github:${status}:${JSON.stringify(content)}',
message.origin
);
window.removeEventListener("message", receiveMessage, false);
}
window.addEventListener("message", receiveMessage, false);
window.opener.postMessage("authorizing:github", "*");
</script>
`;
const blob = new Blob([html]);
return blob;
}

export async function onRequest(context) {
const {
request, // same as existing Worker API
env, // same as existing Worker API
params, // if filename includes [id] or [[path]]
waitUntil, // same as ctx.waitUntil in existing Worker API
next, // used for middleware or to fetch assets
data // arbitrary space for passing data between middlewares
} = context;

const client_id = env.GITHUB_CLIENT_ID;
const client_secret = env.GITHUB_CLIENT_SECRET;

try {
const url = new URL(request.url);
const code = url.searchParams.get('code');
const response = await fetch('https://github.com/login/oauth/access_token', {
method: 'POST',
headers: {
'content-type': 'application/json',
'user-agent': 'cloudflare-functions-github-oauth-login-demo',
accept: 'application/json'
},
body: JSON.stringify({ client_id, client_secret, code })
});
const result = await response.json();
if (result.error) {
return new Response(renderBody('error', result), {
headers: {
'content-type': 'text/html;charset=UTF-8'
},
status: 401
});
}
const token = result.access_token;
const provider = 'github';
const responseBody = renderBody('success', {
token,
provider
});
return new Response(responseBody, {
headers: {
'content-type': 'text/html;charset=UTF-8'
},
status: 200
});
} catch (error) {
console.error(error);
return new Response(error.message, {
headers: {
'content-type': 'text/html;charset=UTF-8'
},
status: 500
});
}
}
10 changes: 2 additions & 8 deletions src/lib/content/boise/about.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
{
"body": "# About Cowgill\n\n![Group photo on the grass before Thirsty Seconds](/media/replace-me.png \"cornicellophoto\")\n\nCowgill Trail Collective began holding group runs in the spring of 2021. We noticed there wasn’t a trail running-focused group in Seattle, and we wanted to create a platform to connect the trail running community.  We started with a weekly Thursday morning trail run and now have four weekly runs, in addition to camping opportunities with unique routes every weekend.  \n\nWe strive to foster interactions, help runners achieve, increase trail stewardship, make the sport more inclusive and accessible, and put on unique events. Our members do not pay dues, all our events are free and open to the public, and we have a diverse range of runners, from beginner trail runners to professional athletes.",
"body": "# About Cowgill\n\n![Group photo on the grass during a Wyld Half](/media/img_6511.jpeg \"Wyld Half Hydration Stop\")\n\nCowgill Trail Collective began holding group runs in the winter of 2023. We noticed there wasn’t a trail running-focused group in Boise, and we wanted to create a platform to connect the trail running community.  We started with a weekly Thursday evening trail run and now put on a variety of other events throughout the year.\n\nWe strive to foster interactions, help runners achieve, increase trail stewardship, make the sport more inclusive and accessible, and put on unique events. Our members do not pay dues, all our events are free and open to the public, and we have a diverse range of runners, from beginner trail runners to professional athletes.",
"metaDescription": "Cowgill brings together trail runners of all levels near Seattle, WA to achieve goals, steward local trails, and make running inclusive and accessible through community events.",
"articles": [
{
"title": "Territory Run Co.",
"link": "https://territoryrun.co/blogs/news/building-a-trail-community-with-cowgill-trail-collective",
"photo": "/media/replace-me.png"
}
],
"articles": [],
"sponsorships": "## Sponsorships/Partnerships\n\n* [HOKA](https://www.hoka.com/en/us/)\n* [Janji ](https://janji.com/?utm_source=google&utm_medium=cpc&utm_campaign=google-ads-brand-exact&utm_source=google&utm_medium=cpc&gad_source=1&gclid=CjwKCAiA3aeqBhBzEiwAxFiOBnTl9jexk3T6K5lYqBPeA4QNzlN4zrGVHQE2DeEm93vcqWL_jnKDRRoCH_8QAvD_BwE)\n* [Gnarly Nutrition](https://gognarly.com/?utm_source=google&utm_medium=paid&utm_campaign=20679179687&utm_content=&utm_term=&gadid=&gad_source=1&gclid=CjwKCAiA3aeqBhBzEiwAxFiOBt6N0393UV1h_K4Mu8H3f-Kk3xt-9UeiYwALfkN2Jai4yVGwHnzLKhoC0JUQAvD_BwE)\n* [Best Day Brewing](https://bestdaybrewing.com/collections/core-beers?gad_source=1&gclid=CjwKCAiA3aeqBhBzEiwAxFiOBlaJeu7gOm-C6i1z8z497uAVdd6ZEsQCegEHxw9mHPYbNSegObs10RoCjigQAvD_BwE)\n* [Wonderland Running](https://www.wonderlandrunning.com/)"
}
14 changes: 7 additions & 7 deletions src/lib/content/boise/contact.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"body": "Reach out with any questions about the group or for potential collaborations.",
"formTitle": "Contact Cowgill!",
"successMessage": "### Thank you for contacting Cowgill!\n\nWe will get back to you as soon as we are back in service!",
"metaDescription": "Get in touch with Cowgill Trail Collective for questions about membership, upcoming events, and potential partnerships or collaborations.",
"customHeaderPhoto": "/media/replace-me.png",
"customHeaderPhotoAltText": "Runners preparing to run in Rainier National Park"
}
"body": "Reach out with any questions about the group or for potential collaborations. We're fun, upbeat, out-and-about, excellent ambassadors and trail stewards. ",
"formTitle": "Contact Cowgill!",
"successMessage": "### Thank you for contacting Cowgill!\n\nWe will get back to you as soon as we are back in service!",
"metaDescription": "Get in touch with Cowgill Trail Collective for questions about membership, upcoming events, and potential partnerships or collaborations.",
"customHeaderPhoto": "/media/img_8605.jpeg",
"customHeaderPhotoAltText": "Cowgill hat on a trail post in the boise trail system"
}
2 changes: 1 addition & 1 deletion src/lib/content/boise/events.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"body": "**Weekdays** (usual locations)\n\n* **M:** Womxn Run The Herd 6:00pm (Brooks Trailhead)\n* **T:** Graze & Chill- run & potluck 6:00pm- monthly\n* Womxn Run the Herd morning edition (urban trails) 6:30am bi-weekly\n* Tuesday Trail Turn Up 6:30pm women-trans-femme-nonbinary trail run with social (Issaquah)- bi-weekly\n* **W:** Werkout Wednesday 6:30am (Lower Woodland Park track)\n* **Th:** Thirsty Thursday 6:30am trail run (Issaquah)\n* Thirsty Seconds 6:30pm roads with social (North Transfer Station Playground)\n\n**Weekends**\n\n* Smooth Mooves - trail adventures usually with camping- monthly\n* Womxn Run the Herd weekend edition - trail adventures usually with camping - monthly\n* Silky & Filthy - run with folding saws and clear trails\n* Volunteering - aid stations at races - frequently\n\n ![A group of trail runners at the trailhead before a Smooth Mooves group run.](/media/replace-me.png)\n*\n*",
"body": "**Thursdays**\n\nDry Season (May -> Oct)\n* 5:30pm\n* Boise North End\n* We run the Camelsback area\n\nWet Season (Nov -> April)\n* 5:30pm\n* Boise East End\n* We run the military reserve trails\n\nOther ad-hoc events happen throughout the year. Follow us on Strava for up to date stuff.",
"metaDescription": "View the weekly schedule of fun running events hosted by Cowgill. Join group runs on Thursdays, workouts on Wednesdays, and longer weekend trail runs.",
"title": "Cowgill Events"
}
8 changes: 4 additions & 4 deletions src/lib/content/boise/home.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"body": "Cowgill Trail Collective is a trail running group based in Boise, Idaho. We host a variety of events both on and off trails, all of which are free and open to the public. Bringing together the trail running community and making the sport more inclusive and accessible is at the core of everything we do. \n\n![Runners before a run in the Teanaways ](/media/replace-me.png \"jonathan.foster\")",
"metaDescription": "Cowgill Trail Collective aims to explore the beautiful Pacific Northwest trails near Seattle, WA. Runners of all experience levels are welcome in our fun, supportive community.",
"headerImage": "/media/replace-me.png",
"headerImageAltText": "Photo of runners on a climb in Olympic National Park"
"body": "Cowgill Trail Collective is a trail running group based in Boise, Idaho. We host a variety of events both on and off trails, all of which are free and open to the public. Bringing together the trail running community and making the sport more inclusive and accessible is at the core of everything we do.\n\n![Runners during camping trip](/media/img_0798.png \"herd camping trip\")",
"metaDescription": "Cowgill Trail Collective aims to explore the beautiful trails in and around Boise. Runners of all experience levels are welcome in our fun, supportive community.",
"headerImage": "/media/img_0799.png",
"headerImageAltText": "Group photo before a run during a camping trip at Bogus. "
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/lib/content/boise/media/img_0798.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/lib/content/boise/media/img_0799.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/lib/content/boise/media/img_1875.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/lib/content/boise/media/img_6511.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/lib/content/boise/media/img_8605.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed src/lib/content/boise/media/replace-me.png
Binary file not shown.
15 changes: 8 additions & 7 deletions src/lib/content/boise/meta.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
{
"headerPhotoAltText": "Runners at the start of a run in the Olympic National Forest",
"instagramHandle": "cowgilltrailcollective",
"stravaLink": "https://www.strava.com/clubs/470714",
"headerPhotoAltText": "Runners at the start of a run in the Boise trail system",
"instagramHandle": "cowgillboise",
"stravaLink": "https://www.strava.com/clubs/1205423",
"cityState": "Boise, ID",
"email": "cowgill.trail@gmail.com",
"calendarLink": "https://calendar.google.com/calendar/u/0/embed?src=cowgill.trail@gmail.com&ctz=America/Los_Angeles",
"logo": "/media/replace-me.png",
"headerPhoto": "/media/replace-me.png"
"email": "cowgillboise@gmail.com",
"calendarLink": "https://calendar.google.com/calendar/u/0?cid=ZWY3MjM3OGUyZGYxOWJlYTAzZDRhMzUzMWU0ZDQ4MzEwN2VhYTRiZDg1NTJhZTg0ODljMjBkMzYxOTViOWNkM0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t",
"calendarSubscribeLink": "https://calendar.google.com/calendar/u/0?cid=ZWY3MjM3OGUyZGYxOWJlYTAzZDRhMzUzMWU0ZDQ4MzEwN2VhYTRiZDg1NTJhZTg0ODljMjBkMzYxOTViOWNkM0Bncm91cC5jYWxlbmRhci5nb29nbGUuY29t",
"logo": "/media/cowgill_boise_black-copy.png",
"headerPhoto": "/media/img_1875.jpeg"
}
2 changes: 1 addition & 1 deletion src/lib/content/portland/home.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"body": "Cowgill Trail Collective is a trail running group based in Boise, Idaho. We host a variety of events both on and off trails, all of which are free and open to the public. Bringing together the trail running community and making the sport more inclusive and accessible is at the core of everything we do. \n\n![Runners before a run in the Teanaways ](/media/replace-me.png \"jonathan.foster\")",
"body": "**Here is a scaffold of content to get you started. All of the content here is copied from the Seattle site, so edit it and make it your own!**\n\nCowgill Trail Collective is a trail running group based in Portland, Oregon. We host a variety of events both on and off trails, all of which are free and open to the public. Bringing together the trail running community and making the sport more inclusive and accessible is at the core of everything we do. \n\n![Runners before a run in the Teanaways ](/media/replace-me.png \"jonathan.foster\")",
"metaDescription": "Cowgill Trail Collective aims to explore the beautiful Pacific Northwest trails near Seattle, WA. Runners of all experience levels are welcome in our fun, supportive community.",
"headerImage": "/media/replace-me.png",
"headerImageAltText": "Photo of runners on a climb in Olympic National Park"
Expand Down
3 changes: 2 additions & 1 deletion src/lib/content/portland/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
"headerPhotoAltText": "Runners at the start of a run in the Olympic National Forest",
"instagramHandle": "cowgilltrailcollective",
"stravaLink": "https://www.strava.com/clubs/470714",
"cityState": "Boise, ID",
"cityState": "Portland, OR",
"email": "cowgill.trail@gmail.com",
"calendarLink": "https://calendar.google.com/calendar/u/0/embed?src=cowgill.trail@gmail.com&ctz=America/Los_Angeles",
"calendarSubscribeLink": "https://calendar.google.com/calendar/u/0?cid=Y293Z2lsbC50cmFpbEBnbWFpbC5jb20",
"logo": "/media/replace-me.png",
"headerPhoto": "/media/replace-me.png"
}
1 change: 1 addition & 0 deletions src/lib/content/seattle/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
"cityState": "Seattle, WA",
"email": "cowgill.trail@gmail.com",
"calendarLink": "https://calendar.google.com/calendar/u/0/embed?src=cowgill.trail@gmail.com&ctz=America/Los_Angeles",
"calendarSubscribeLink": "https://calendar.google.com/calendar/u/0?cid=Y293Z2lsbC50cmFpbEBnbWFpbC5jb20",
"logo": "/media/cowgill_white_logo.png"
}
1 change: 1 addition & 0 deletions src/lib/content/template/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"cityState": "Boise, ID",
"email": "cowgill.trail@gmail.com",
"calendarLink": "https://calendar.google.com/calendar/u/0/embed?src=cowgill.trail@gmail.com&ctz=America/Los_Angeles",
"calendarSubscribeLink": "https://calendar.google.com/calendar/u/0?cid=Y293Z2lsbC50cmFpbEBnbWFpbC5jb20",
"logo": "/media/replace-me.png",
"headerPhoto": "/media/replace-me.png"
}
44 changes: 23 additions & 21 deletions src/routes/about/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,28 @@
</svelte:head>

<MarkDown content={aboutData.body} />
<hr class="my-10 h-0.5 rounded border-0 bg-zinc-600" />
<div class="typography text-center">
<h2>Articles</h2>
</div>
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
{#each aboutData.articles as { link, title, photo }}
<a href={link}>
<div class="overflow-hidden rounded-xl bg-zinc-800">
<header class="my-7 text-center text-lg"><b>{title}</b></header>
<div class="relative h-60 w-full overflow-hidden md:h-72 lg:h-80">
<Photo
imgSrc={photo}
altText={`${title} article cover photo`}
class="absolute h-full w-full object-cover"
containerClass="h-full"
/>
{#if aboutData.articles.length > 0}
<hr class="my-10 h-0.5 rounded border-0 bg-zinc-600" />
<div class="typography text-center">
<h2>Articles</h2>
</div>
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
{#each aboutData.articles as { link, title, photo }}
<a href={link}>
<div class="overflow-hidden rounded-xl bg-zinc-800">
<header class="my-7 text-center text-lg"><b>{title}</b></header>
<div class="relative h-60 w-full overflow-hidden md:h-72 lg:h-80">
<Photo
imgSrc={photo}
altText={`${title} article cover photo`}
class="absolute h-full w-full object-cover"
containerClass="h-full"
/>
</div>
</div>
</div>
</a>
{/each}
</div>
<hr class="my-10 h-0.5 rounded border-0 bg-zinc-600" />
</a>
{/each}
</div>
<hr class="my-10 h-0.5 rounded border-0 bg-zinc-600" />
{/if}
<MarkDown content={aboutData.sponsorships} />
84 changes: 47 additions & 37 deletions src/routes/contact/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
let modal;

const contactData = getCMSData('contact');
const metaData = getCMSData('meta');

const handleSubmit = (event) => {
event.preventDefault();
Expand All @@ -20,6 +21,8 @@
.then(() => modal.show())
.catch((error) => alert(error));
};

const contentKey = import.meta.env.VITE_CONTENT_KEY;
</script>

<svelte:head>
Expand All @@ -32,51 +35,58 @@
<div class="text-center">
<MarkDown content={contactData.body} />
</div>
<div class="rounded-xl bg-zinc-800 p-5 sm:p-10">
<p class="text-2xl font-bold">{contactData.formTitle}</p>
<form
name="contact"
method="POST"
netlify-honeypot="bot-field"
data-netlify="true"
on:submit={handleSubmit}
class="my-6 grid grid-cols-1 gap-3"
>
<input type="hidden" name="form-name" value="contact" />
<div class="grid gap-3 md:grid-cols-2">

{#if contentKey === 'seattle'}
<div class="rounded-xl bg-zinc-800 p-5 sm:p-10">
<p class="text-2xl font-bold">{contactData.formTitle}</p>
<form
name="contact"
method="POST"
netlify-honeypot="bot-field"
data-netlify="true"
on:submit={handleSubmit}
class="my-6 grid grid-cols-1 gap-3"
>
<input type="hidden" name="form-name" value="contact" />
<div class="grid gap-3 md:grid-cols-2">
<div>
<label for="firstname" class="block">First name</label>
<input type="text" id="firstname" name="firstname" placeholder="First name" />
</div>
<div>
<label for="lastname" class="block">Last name</label>
<input type="text" id="lastname" name="lastname" placeholder="Last name" />
</div>
</div>
<div>
<label for="firstname" class="block">First name</label>
<input type="text" id="firstname" name="firstname" placeholder="First name" />
<label for="email" class="block">Email address</label>
<input type="email" id="email" name="email" placeholder="Email address" />
</div>
<div>
<label for="lastname" class="block">Last name</label>
<input type="text" id="lastname" name="lastname" placeholder="Last name" />
<label for="message" class="block">Message</label>
<textarea type="text" id="message" name="message" placeholder="Message" rows="8" required />
</div>
</div>
<div>
<label for="email" class="block">Email address</label>
<input type="email" id="email" name="email" placeholder="Email address" />
</div>
<div>
<label for="message" class="block">Message</label>
<textarea type="text" id="message" name="message" placeholder="Message" rows="8" required />
</div>
<small>We'll never share your email with anyone else.</small>
<button type="submit" class="btn-pink sm:text-lg">Submit</button>
</form>
</div>
<small>We'll never share your email with anyone else.</small>
<button type="submit" class="btn-pink sm:text-lg">Submit</button>
</form>
</div>

<dialog class="relative z-20" bind:this={modal}>
<div class="fixed inset-0 bg-zinc-700 bg-opacity-80 backdrop-blur"></div>
<div class="fixed inset-0 z-30 w-screen overflow-y-auto">
<div class="flex min-h-full items-center justify-center text-center">
<div class="mx-8 rounded-2xl bg-zinc-800 p-8 pb-20">
<MarkDown content={contactData.successMessage} />
<a href="/" class="btn-pink inline-block w-full sm:text-lg">Home</a>
<dialog class="relative z-20" bind:this={modal}>
<div class="fixed inset-0 bg-zinc-700 bg-opacity-80 backdrop-blur"></div>
<div class="fixed inset-0 z-30 w-screen overflow-y-auto">
<div class="flex min-h-full items-center justify-center text-center">
<div class="mx-8 rounded-2xl bg-zinc-800 p-8 pb-20">
<MarkDown content={contactData.successMessage} />
<a href="/" class="btn-pink inline-block w-full sm:text-lg">Home</a>
</div>
</div>
</div>
</dialog>
{:else}
<div class="text-center">
<a href={`mailto:${metaData.email}}`} class="text-2xl font-bold"> You can reach us at {metaData.email}.</a>
</div>
</dialog>
{/if}

<style lang="postcss">
form input,
Expand Down
Loading