A travel-focused platform built with Astro that helps users discover meaningful ways to give back to the places they visit through animal sanctuaries, cultural exchanges, social impact projects, and sustainable travel experiences.
- Framework: Astro 5.10.0 with Static Site Generation
- Styling: TailwindCSS 4.1.3 with Flowbite components
- Database: Supabase
- Deployment: Cloudflare Workers (via Wrangler)
- Search: Pagefind integration
- Content: MDX support with RSS feeds
astro.config.mjs- Astro configuration with MDX, sitemap, and Pagefindpackage.json- Dependencies and scriptstsconfig.json- TypeScript configurationwrangler.jsonc- Cloudflare Workers deployment configRESPONSIVE_IMAGES.md- Documentation for image handling
SQL migration files for database schema:
001_create_saved_lists.sql- User saved lists functionality002_normalize_item_id.sql- Item ID normalization003_create_user_item_status.sql- User item status tracking
Static assets served directly:
favicon.png- Site favicongive-back-avatar.svg- Brand avatargiveback-guide-placeholder.jpg- Default placeholder imagerobots.txt- Search engine crawler instructions
consts.ts- Global constants (site title, description)content.config.ts- Content collection configuration
- Brand assets (avatars, favicons)
/ads/- Advertisement assets (G Adventures)
Layout & Navigation:
BaseHead.astro- HTML head metadataHeader.astro&HeaderLink.astro- Site navigationFooter.astro- Site footerAnalytics.astro- Analytics tracking
Content Display:
PostCard.astro- Blog post preview cardsProjectCard.astro- Project showcase cardsStayCard.astro- Accommodation display cardsFormattedDate.astro- Date formatting utilityResponsiveImage.astro&ResponsiveImageWithSkeleton.astro- Image handling
Interactive Elements:
Announcement.astro- Site announcementsProjectsToolbar.astro- Project filtering toolbar- Various dropdown components for filtering:
BTagsDropdown.astro- Blog tagsPCategoryDropdown.astro- Project categoriesPCountryDropdown.astro- Project countriesPLocaleDropdown.astro- Project localesSCountryDropdown.astro- Stay countriesSLocaleDropdown.astro- Stay locales
Specialized Components:
/Ads/AdBox.astro- Advertisement display/Homepage/- Homepage-specific components:HomeHero.astro- Hero sectionLatestPosts.astro- Recent blog postsLatestProjects.astro- Recent projectsLatestStays.astro- Recent stays
/Popups/SubscribeDrawer.astro- Newsletter subscription/Projects/SupportBox.astro- Project support information/Save/- User save functionality:SaveToList.astro- Save to list componentsaveToList.client.js- Client-side save logic
Page layout templates:
MainLayout.astro- Base site layoutPostLayout.astro- Blog post layoutProjectPage.astro- Project detail layoutStayPage.astro- Accommodation detail layout
Business logic and integrations:
auth.ts- Authentication handlingcompleted.ts- Completion trackinglists.ts- User list managementsupabase.ts- Database client configuration
Main Pages:
index.astro- Homepagesearch.astro&_search.astro- Search functionality404.astro- Error pagebeta.astro,concierge.astro,contact.astro- Feature pagesprivacy.astro,terms.astro- Legal pagesreport.astro,submit.astro,support.astro- User actionssustainability.astro,why.astro- Content pagesverify.astro- Email verificationrss.xml.js- RSS feed generation
Dynamic Routes:
/_blog/- Blog system:[...page].astro- Blog pagination[...slug].astro- Individual blog posts
/blog/- Blog display:[...page].astro- Blog listing with pagination[...slug].astro- Blog post display/[tag]/- Tag-based filtering
/projects/- Project showcase (dynamic routes)/stays/- Accommodation listings (dynamic routes)
User Features:
/auth/- Authentication system:dashboard.astro- User dashboarddashboard.client.js- Dashboard client logiclogin.astro- Login pageonboarding.astro- User onboardingprofile.astro- User profileverify.astro- Account verification
/join/- User registration:confirm.astro- Registration confirmation
About Section:
/about/- Company information:index.astro- Main about pageadvertising.astro- Advertising informationai-statement.astro- AI usage policyimpacts.astro- Impact reportingverification.astro- Verification process
API Endpoints:
/api/items.json.ts- Items API endpoint
Helper functions:
cloudinary.ts- Image optimization with CloudinaryimpactAreas.ts- Impact area definitions
global.css- Global styles and Tailwind imports
Build and utility scripts
- Content Management: MDX-based blog with RSS feeds
- Search: Integrated Pagefind for fast site search
- User Authentication: Supabase-powered auth system
- Saved Lists: Users can save and organize content
- Responsive Images: Cloudinary integration with skeleton loading
- Filtering: Multiple dropdown filters for projects and stays
- Multi-language Support: Locale-based filtering
- Social Impact Tracking: Impact areas and completion tracking
- Dropdown Components: Multiple similar dropdown components could potentially be consolidated into a generic dropdown with props
- Card Components:
PostCard,ProjectCard, andStayCardmight share common patterns - Image Components:
ResponsiveImageandResponsiveImageWithSkeletoncould potentially be merged - Authentication: Multiple auth-related pages could share more common components
- Country/Locale Logic: Could be centralized since it's used across multiple dropdowns
- API Endpoints: Currently only one API endpoint - consider if more are needed or if structure should change
- Client Scripts: Only one client script in components - consider if more interactive features need client-side code
- Component Props: Consider documenting component interfaces
- Database Schema: Document the relationship between migrations and current schema
- Content Types: Document the structure of projects, stays, and blog posts
- Deployment Process: Document the build and deployment workflow
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build locally
npm run deploy # Build and deploy to Cloudflare WorkersThe project uses Supabase with a migration-based schema. Current migrations handle:
- User saved lists functionality
- Item ID normalization
- User item status tracking
Deployed on Cloudflare Workers using Wrangler, with static assets served from the dist directory.