diff --git a/src/routes/(public)/about/+page.server.ts b/src/routes/(public)/about/+page.server.ts new file mode 100644 index 0000000..0ec062a --- /dev/null +++ b/src/routes/(public)/about/+page.server.ts @@ -0,0 +1,8 @@ +import { getPageBlocks } from '$lib/server/content'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ parent }) => { + const parentData = await parent(); + const blocks = await getPageBlocks('about'); + return { ...parentData, blocks }; +}; diff --git a/src/routes/(public)/about/+page.svelte b/src/routes/(public)/about/+page.svelte new file mode 100644 index 0000000..85e7d46 --- /dev/null +++ b/src/routes/(public)/about/+page.svelte @@ -0,0 +1,144 @@ + + + + About Us | {orgName} + + + + +
+
+

{blocks?.intro?.heading ?? `About ${orgName}`}

+

+ {blocks?.intro?.text ?? 'Every pet deserves a second chance at a happy life.'} +

+
+
+ + +
+
+
+

{blocks?.mission?.heading ?? 'Our Mission'}

+
+

+ {blocks?.mission?.text ?? `${orgName} is a foster-based rescue dedicated to saving animals in need and finding them loving forever homes. We believe every pet deserves safety, compassion, and a family to call their own.`} +

+
+
+
+ + +
+
+

{blocks?.how_we_work?.heading ?? 'How We Work'}

+
+ +
+
+
+ + + +
+

Foster-Based Model

+

+ Every pet lives in a loving foster home where they receive personalized attention, socialization, and care while waiting for their forever family. +

+
+ +
+
+ + + +
+

Complete Vetting

+

+ Every pet in our care receives a full veterinary workup, vaccinations, spay/neuter surgery, microchipping, and any additional medical treatment they need. +

+
+ +
+
+ + + +
+

Thoughtful Matching

+

+ We carefully match each pet with the right family through our application and screening process — for a fit that lasts a lifetime. +

+
+
+
+
+ + +
+
+
+

Our Story

+
+ {#if blocks?.story?.text} +
{@html blocks.story.text}
+ {:else} +
+

+ {orgName} was born from a simple belief: no pet should be without a safe place to call home. What started as a small group of passionate animal lovers has grown into a dedicated organization serving our community. +

+

+ Through our network of incredible foster families, we've been able to rehabilitate, socialize, and prepare pets for life in their forever homes. +

+

+ Every pet that comes through our program receives the medical care, training support, and love they need to thrive. +

+
+ {/if} +
+
+
+ + +
+
+

Our Team & Volunteers

+
+

+ {orgName} runs on the dedication of our volunteers — from foster families opening their homes to transport drivers, event coordinators, and behind-the-scenes helpers. +

+
+
+

100%

+

Volunteer Run

+
+
+

Foster

+

Based Network

+
+
+

Hundreds

+

Of Pets Saved

+
+
+
+
+ + +
+
+

Want to Help?

+

+ See how you can make a difference in the lives of pets who need it most. +

+ + How to Help + +
+
diff --git a/src/routes/(public)/adoption-process/+page.server.ts b/src/routes/(public)/adoption-process/+page.server.ts new file mode 100644 index 0000000..7640e33 --- /dev/null +++ b/src/routes/(public)/adoption-process/+page.server.ts @@ -0,0 +1,8 @@ +import { getPageBlocks } from '$lib/server/content'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ parent }) => { + const parentData = await parent(); + const blocks = await getPageBlocks('adoption-process'); + return { ...parentData, blocks }; +}; diff --git a/src/routes/(public)/adoption-process/+page.svelte b/src/routes/(public)/adoption-process/+page.svelte new file mode 100644 index 0000000..6556945 --- /dev/null +++ b/src/routes/(public)/adoption-process/+page.svelte @@ -0,0 +1,138 @@ + + + + Adoption Process | {orgName} + + + + +
+
+

Adoption Process

+

Everything you need to know about adopting from us.

+
+
+ + +
+
+

+ Thank you for your interest in adopting a pet from {orgName}! + {#if orgEmail} + Please email us at + {orgEmail} + with any questions or concerns. + {/if} +

+
+

+ Please read the following information before applying! +

+
+
+
+ + +
+
+

Frequently Asked Questions

+
+ +
+
+ + What is the adoption process? + + + + +
+

Submit an adoption application and complete each question thoroughly. Once submitted, the following steps will take place:

+
    +
  • Reference Check — We may contact your vet, landlord, and personal references.
  • +
  • Pre-Adoption Home Visit — We will schedule a visit to ensure the home is safe for the pet.
  • +
  • Meet & Greet — Once approved, we coordinate a time for you to meet the pet.
  • +
  • Adoption is Final — Adoption fees are non-refundable if the pet needs to be returned.
  • +
+
+
+ +
+ + What are the adoption fees? + + + + +
+ {#if adoptionFee} +

The standard adoption fee is ${adoptionFee}. Fees help cover veterinary care, vaccinations, spay/neuter, and microchipping.

+ {:else} +

+ Adoption fees vary. Contact us + {#if orgEmail} + at {orgEmail} + {/if} + for current fee information. +

+ {/if} +
+
+ +
+ + What happens after my application is approved? + + + + +
+

Our adoption team will reach out to coordinate meeting the pet. They will work with both you and the foster family to find a time and place that works for everyone.

+
+
+ +
+ + Have more questions? + + + + +
+

+ Contact us + {#if orgEmail} + at {orgEmail} + {/if} + and we will be happy to answer any questions. +

+
+
+
+
+
+ + +{#if data.orgConfig.applications.adoptionEnabled} +
+
+

Ready to Apply?

+

+ Start the process today and take the first step toward welcoming a rescue pet into your family. +

+ +
+
+{/if} diff --git a/src/routes/(public)/become-a-foster/+page.server.ts b/src/routes/(public)/become-a-foster/+page.server.ts new file mode 100644 index 0000000..eecd1e2 --- /dev/null +++ b/src/routes/(public)/become-a-foster/+page.server.ts @@ -0,0 +1,8 @@ +import { getPageBlocks } from '$lib/server/content'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ parent }) => { + const parentData = await parent(); + const blocks = await getPageBlocks('become-a-foster'); + return { ...parentData, blocks }; +}; diff --git a/src/routes/(public)/become-a-foster/+page.svelte b/src/routes/(public)/become-a-foster/+page.svelte new file mode 100644 index 0000000..c6b7ec9 --- /dev/null +++ b/src/routes/(public)/become-a-foster/+page.svelte @@ -0,0 +1,89 @@ + + + + Become a Foster | {orgName} + + + + +
+
+

Become a Foster

+

Open your heart and home to a pet in need.

+
+
+ + +
+
+

+ Have you ever thought about fostering a pet? All of our animals reside in foster homes so they can have a normal life while awaiting a forever family. Fostering is the backbone of what we do, and we are always in need of caring individuals willing to open their homes. +

+
+
+ + +
+
+
+

What Does Fostering Entail?

+
+
+

+ Fostering means taking in a pet and providing them with a safe, loving environment while they wait for their forever home. You are giving them the gift of a normal home life. +

+

+ {orgName} provides all necessary supplies including food, crates, leashes, and toys. All vetting is paid for by the rescue, including vaccinations, spay/neuter, and any medical treatment needed. +

+

+ We also need temporary fosters! Whether you can commit for a few weeks or a few months, every bit of help matters. +

+
+
+
+
+ + +
+
+
+

What If I Want to Adopt My Foster Pet?

+
+
+

+ We completely understand that you may fall in love with your foster pet — it happens more often than you might think! Foster families always get first consideration for adopting the animal in their care. +

+

+ As a foster, you also play an important role in helping choose the right adopter for your foster pet. Your input is invaluable in making sure each animal ends up in the best possible home. +

+
+
+
+
+ + +
+
+

Ready to Foster?

+

+ Fill out our foster application or reach out with any questions. +

+
+ {#if fosterEnabled} + + Apply to Foster + + {/if} + {#if orgEmail} + + Email Us + + {/if} +
+
+
diff --git a/src/routes/(public)/foster-resources/+page.server.ts b/src/routes/(public)/foster-resources/+page.server.ts new file mode 100644 index 0000000..3a18bf7 --- /dev/null +++ b/src/routes/(public)/foster-resources/+page.server.ts @@ -0,0 +1,41 @@ +import type { Actions, PageServerLoad } from './$types'; +import { fail } from '@sveltejs/kit'; +import { getPageBlocks } from '$lib/server/content'; + +const FOSTER_PASSWORD = process.env.FOSTER_RESOURCES_PASSWORD ?? ''; + +export const load: PageServerLoad = async ({ cookies, parent }) => { + const parentData = await parent(); + + // If no password is configured, show content freely + const passwordRequired = FOSTER_PASSWORD.length > 0; + const authed = !passwordRequired || cookies.get('foster_resources_auth') === 'true'; + + let blocks = {}; + if (authed) { + blocks = await getPageBlocks('foster-resources'); + } + + return { ...parentData, authed, passwordRequired, blocks }; +}; + +export const actions: Actions = { + default: async ({ request, cookies }) => { + const data = await request.formData(); + const password = data.get('password')?.toString(); + + if (!FOSTER_PASSWORD || password !== FOSTER_PASSWORD) { + return fail(401, { error: 'Incorrect password' }); + } + + cookies.set('foster_resources_auth', 'true', { + path: '/foster-resources', + httpOnly: true, + secure: true, + sameSite: 'lax', + maxAge: 60 * 60 * 24 * 30 // 30 days + }); + + return { success: true }; + } +}; diff --git a/src/routes/(public)/foster-resources/+page.svelte b/src/routes/(public)/foster-resources/+page.svelte new file mode 100644 index 0000000..f18a725 --- /dev/null +++ b/src/routes/(public)/foster-resources/+page.svelte @@ -0,0 +1,72 @@ + + + + Foster Resources | {orgName} + + + + +
+
+

Foster Resources

+

Resources and documents for our foster families.

+
+
+ +
+
+ {#if !data.authed && !form?.success} + +
+

This page is password-protected

+

Enter the foster resources password to view this content.

+ + {#if form?.error} +
{form.error}
+ {/if} + +
+ + + +
+
+ {:else} + +
+ {#if blocks && Object.keys(blocks).length > 0} + {#each Object.entries(blocks) as [key, content]} +
+

{key.replace(/-/g, ' ')}

+
+
{@html content}
+
+ {/each} + {:else} +
+ + + +

Resources Coming Soon

+

Foster resource documents will be published here. Contact us for current resources.

+
+ {/if} +
+ {/if} +
+
diff --git a/src/routes/(public)/how-to-help/+page.server.ts b/src/routes/(public)/how-to-help/+page.server.ts new file mode 100644 index 0000000..dbaaf86 --- /dev/null +++ b/src/routes/(public)/how-to-help/+page.server.ts @@ -0,0 +1,8 @@ +import { getPageBlocks } from '$lib/server/content'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ parent }) => { + const parentData = await parent(); + const blocks = await getPageBlocks('how-to-help'); + return { ...parentData, blocks }; +}; diff --git a/src/routes/(public)/how-to-help/+page.svelte b/src/routes/(public)/how-to-help/+page.svelte new file mode 100644 index 0000000..1ad0654 --- /dev/null +++ b/src/routes/(public)/how-to-help/+page.svelte @@ -0,0 +1,165 @@ + + + + How to Help | {orgName} + + + + +
+
+

Make a Difference

+

+ There are so many ways to support our rescue pets on their journey home. +

+
+
+ +
+
+
+ +
+
+ + + +

Adopt

+
+
+

+ Give a rescue pet their forever home. Our adoption process includes an application, meet-and-greet, and a trial period to ensure a great match. All pets come fully vetted, spayed/neutered, and microchipped. +

+
+ + View Available Pets + + {#if data.orgConfig.applications.adoptionEnabled} + + Apply to Adopt + + {/if} +
+
+
+ + +
+
+ + + +

Foster

+
+
+

+ Open your home and heart to a pet in need. Fostering saves lives by making room to take in more pets. We provide all supplies, food, and medical care. You provide the love. +

+
+ {#if data.orgConfig.applications.fosterEnabled} + + Apply to Foster + + {:else} + + Learn More + + {/if} +
+
+
+ + +
+
+ + + +

Volunteer

+
+
+

+ Lend your time and talents to help our rescue. We need help with events, transport, photography, social media, and more. Every skill set has a place here. +

+
+ {#if data.orgConfig.applications.volunteerEnabled} + + Apply to Volunteer + + {:else} + + Learn More + + {/if} +
+
+
+ + +
+
+ + + +

Donate

+
+
+

+ Your financial support directly funds veterinary care, food, and supplies for our pets. Every dollar makes a difference. +

+ +
+
+ + +
+
+ + + +

Sponsor

+
+
+

+ Become a business sponsor and support our mission while gaining visibility in the community. We offer multiple sponsorship tiers. +

+
+ + View Sponsors + + {#if orgEmail} + + Contact Us + + {/if} +
+
+
+
+
+
+ + +
+
+

Not Sure Where to Start?

+

Reach out and we'll help you find the best way to get involved.

+ {#if orgEmail} + + Email Us + + {:else} + + Contact Us + + {/if} +
+
diff --git a/src/routes/(public)/volunteer/+page.server.ts b/src/routes/(public)/volunteer/+page.server.ts new file mode 100644 index 0000000..9bd290e --- /dev/null +++ b/src/routes/(public)/volunteer/+page.server.ts @@ -0,0 +1,8 @@ +import { getPageBlocks } from '$lib/server/content'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ parent }) => { + const parentData = await parent(); + const blocks = await getPageBlocks('volunteer'); + return { ...parentData, blocks }; +}; diff --git a/src/routes/(public)/volunteer/+page.svelte b/src/routes/(public)/volunteer/+page.svelte new file mode 100644 index 0000000..755d408 --- /dev/null +++ b/src/routes/(public)/volunteer/+page.svelte @@ -0,0 +1,82 @@ + + + + Volunteer Opportunities | {orgName} + + + + +
+
+

Volunteer Opportunities

+

Every skill set has a place here. Find out how you can help.

+
+
+ + +
+
+

+ {orgName} runs entirely on volunteers, and we could not do what we do without the incredible people who donate their time and talents. Whether you have a few hours a month or want to get deeply involved, there is a role for you. +

+
+
+ + +
+
+

Ways to Volunteer

+
+ +
+ {#each [ + { icon: 'calendar', title: 'Event Help', desc: 'Help plan and run adoption events, fundraisers, and community outreach activities.' }, + { icon: 'truck', title: 'Transport', desc: 'Drive pets to vet appointments, foster homes, or adoption events. Reliable transport volunteers are critical.' }, + { icon: 'camera', title: 'Photography', desc: 'Great photos help animals find homes faster. Volunteer for adoption photos, event shots, or social content.' }, + { icon: 'chat', title: 'Social Media', desc: 'Help share stories, create engaging posts, and grow our online community.' }, + { icon: 'doc', title: 'Administrative Support', desc: 'Assist with data entry, application processing, email communication, and other behind-the-scenes tasks.' }, + { icon: 'star', title: 'Fundraising & Mentoring', desc: 'Organize fundraising campaigns or mentor new foster families as they learn the ropes.' } + ] as role} +
+
+ + {#if role.icon === 'calendar'} + + {:else if role.icon === 'truck'} + + {:else if role.icon === 'camera'} + + {:else if role.icon === 'chat'} + + {:else if role.icon === 'doc'} + + {:else} + + {/if} + +
+

{role.title}

+

{role.desc}

+
+ {/each} +
+
+
+ + +{#if data.orgConfig.applications.volunteerEnabled} +
+
+

Ready to Get Involved?

+

+ Fill out our volunteer application and we will find the perfect role for you. +

+ + Apply to Volunteer + +
+
+{/if} diff --git a/src/routes/(public)/why-adopt/+page.server.ts b/src/routes/(public)/why-adopt/+page.server.ts new file mode 100644 index 0000000..41d3c86 --- /dev/null +++ b/src/routes/(public)/why-adopt/+page.server.ts @@ -0,0 +1,8 @@ +import { getPageBlocks } from '$lib/server/content'; +import type { PageServerLoad } from './$types'; + +export const load: PageServerLoad = async ({ parent }) => { + const parentData = await parent(); + const blocks = await getPageBlocks('why-adopt'); + return { ...parentData, blocks }; +}; diff --git a/src/routes/(public)/why-adopt/+page.svelte b/src/routes/(public)/why-adopt/+page.svelte new file mode 100644 index 0000000..acdf865 --- /dev/null +++ b/src/routes/(public)/why-adopt/+page.svelte @@ -0,0 +1,64 @@ + + + + Why Adopt | {orgName} + + + + +
+
+

{blocks?.intro?.heading ?? 'Why Adopt?'}

+

+ {blocks?.intro?.text ?? 'Adopting a rescue pet is one of the most rewarding decisions you can make.'} +

+
+
+ +
+
+ {#if blocks?.main?.text} +
{@html blocks.main.text}
+ {:else} +
+ {#each [ + { title: 'Save a Life', desc: 'When you adopt from a rescue, you are giving a pet a second chance they might not otherwise have. Every adoption makes room for another animal in need.' }, + { title: 'Fully Vetted Pets', desc: 'All of our animals come spayed or neutered, vaccinated, and microchipped. We cover all veterinary costs so you can welcome a healthy pet into your home.' }, + { title: 'Know What You Are Getting', desc: 'Foster families observe our pets in a home environment, so we can tell you about their personality, habits, and compatibility with other animals and children.' }, + { title: 'Ongoing Support', desc: 'Adoption is not just a transaction. We are here to help you with questions and guidance throughout your pet\'s life.' }, + { title: 'Feel Good About It', desc: 'Adoption means you are not supporting puppy mills or irresponsible breeding. You are changing the world, one pet at a time.' } + ] as reason} +
+
+ + + +
+
+

{reason.title}

+

{reason.desc}

+
+
+ {/each} +
+ {/if} +
+
+ + +{#if data.orgConfig.applications.adoptionEnabled} +
+
+

Ready to Meet Your New Best Friend?

+

Browse our available pets and start your adoption journey today.

+ + Browse Available Pets + +
+
+{/if}