Matt 06733cb2cb
All checks were successful
Build and Push Docker Image / docker (push) Successful in 42s
Integrate Stripe Checkout and add comprehensive UI enhancements
## Stripe Payment Integration
- Add Express.js backend server with Stripe Checkout Sessions
- Create SQLite database for order tracking
- Implement Stripe webhook handlers for payment events
- Integrate with Wren Climate API for carbon offset fulfillment
- Add CheckoutSuccess and CheckoutCancel pages
- Create checkout API client for frontend
- Update OffsetOrder component to redirect to Stripe Checkout
- Add processing fee calculation (3% of base amount)
- Implement order status tracking (pending → paid → fulfilled)

Backend (server/):
- Express server with CORS and middleware
- SQLite database with Order schema
- Stripe configuration and client
- Order CRUD operations model
- Checkout session creation endpoint
- Webhook handler for payment confirmation
- Wren API client for offset fulfillment

Frontend:
- CheckoutSuccess page with order details display
- CheckoutCancel page with retry encouragement
- Updated OffsetOrder to use Stripe checkout flow
- Added checkout routes to App.tsx
- TypeScript interfaces for checkout flow

## Visual & UX Enhancements
- Add CertificationBadge component for project verification status
- Create PortfolioDonutChart for visual portfolio allocation
- Implement RadialProgress for percentage displays
- Add reusable form components (FormInput, FormTextarea, FormSelect, FormFieldWrapper)
- Refactor OffsetOrder with improved layout and animations
- Add offset percentage slider with visual feedback
- Enhance MobileOffsetOrder with better responsive design
- Improve TripCalculator with cleaner UI structure
- Update CurrencySelect with better styling
- Add portfolio distribution visualization
- Enhance project cards with hover effects and animations
- Improve color palette and gradient usage throughout

## Configuration
- Add VITE_API_BASE_URL environment variable
- Create backend .env.example template
- Update frontend .env.example with API URL
- Add Stripe documentation references

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 21:45:14 +01:00
2025-05-13 18:50:30 +02:00
2025-10-29 14:58:22 +01:00
2025-10-29 14:58:22 +01:00
2025-05-13 19:26:51 +02:00
2025-06-03 19:07:33 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 19:02:08 +02:00
2025-05-13 19:02:08 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 20:09:23 +02:00
2025-05-13 20:09:23 +02:00
2025-06-03 14:07:33 +02:00
2025-06-03 14:07:33 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 19:02:08 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00
2025-05-13 18:50:30 +02:00

Puffin Offset - Carbon Offsetting for Yachts

This application helps users calculate and offset the carbon footprint of yachts through verified carbon offset projects.

Features

  • Carbon footprint calculation for yacht trips
  • Integration with Wren carbon offset projects
  • Responsive UI for mobile and desktop
  • Contact forms powered by Formspree

Setup

Local Development

  1. Install dependencies:
npm install
  1. Create a .env file with your API tokens:
VITE_WREN_API_TOKEN=your-token-here
VITE_FORMSPREE_CONTACT_ID=your-formspree-contact-form-id
VITE_FORMSPREE_OFFSET_ID=your-formspree-offset-form-id
  1. Run the development server:
npm run dev

Docker Setup

This project can be run in Docker containers using Docker Compose, and is configured to work with an Nginx reverse proxy on the host.

Prerequisites

  • Docker
  • Docker Compose
  • Nginx (on the host system for SSL termination and reverse proxying)

Running with Docker Compose

  1. Build and start the containers:
docker compose up -d
  1. The Docker container will listen on port 3800, which should be reverse-proxied by your host Nginx.

  2. Stop the containers:

docker compose down

Nginx Configuration

The project includes two Nginx configuration files:

  1. nginx.conf: Used INSIDE the Docker container to serve the static files on port 3800
  2. nginx-host.conf: A reference config for setting up your Nginx on the HOST to reverse proxy to the Docker container

To set up the host Nginx:

  1. Copy the nginx-host.conf to your Nginx sites directory:
sudo cp nginx-host.conf /etc/nginx/sites-available/puffinoffset.com
sudo ln -s /etc/nginx/sites-available/puffinoffset.com /etc/nginx/sites-enabled/
  1. Uncomment the SSL certificate lines after you've obtained certificates using Certbot or another SSL provider
  2. Test and reload Nginx:
sudo nginx -t
sudo systemctl reload nginx

Environment Variables

When using Docker, the environment variables are mounted as a volume from your local .env file. Make sure it contains:

VITE_WREN_API_TOKEN=your-token-here
VITE_FORMSPREE_CONTACT_ID=your-formspree-contact-form-id
VITE_FORMSPREE_OFFSET_ID=your-formspree-offset-form-id

Backend Service (Optional)

The docker-compose file includes a commented section for running the backend script (app.js) in a separate container. To enable it:

  1. Uncomment the backend service in docker-compose.yml
  2. Ensure your .env file contains the needed variables
  3. Run docker compose up -d to start both services

API Documentation

For Wren API documentation, visit: https://wren.co/api

Building for Production

# Without Docker
npm run build

# With Docker
docker compose build

The production build will be available in the dist directory, or served by Nginx in the Docker container.

Description
No description provided
Readme 4.1 MiB
Languages
TypeScript 81.7%
JavaScript 11.7%
Handlebars 3%
CSS 1.6%
HTML 1.3%
Other 0.7%