posted an update

EventFlow: Project Evolution Update Documenting the journey from concept to deployment for the H0: Hack the Zero Stack hackathon.

Overview Project: EventFlow — Fair-Trade Ticketing for Independent Creators Timeline: June 18, 2026 → Present Mission: Build a production-ready, monetizable ticketing platform that charges 2.5% + $0.30 instead of the industry standard 6-10%+, with zero overselling guaranteed by atomic DynamoDB operations.

Milestone 1: The Spark (June, 2026) The Inspiration The idea struck during a conversation with a friend who runs a local pop-up art market. She was frustrated — Eventbrite had taken nearly 15% of her ticket revenue in fees, and she had no way to know if tickets were oversold until angry customers showed up at the door. At the same time, I had just read about the H0: Hack the Zero Stack hackathon — a challenge to build production-ready full-stack apps using Vercel v0 and AWS Databases. The timing was perfect. Initial Concept: · A ticketing platform with transparent, low fees · Atomic inventory to prevent overselling · A beautiful, mobile-first checkout experience · Built entirely with Next.js, Vercel v0, and Amazon DynamoDB

Milestone 2: The Architecture (June, 2026) The Technology Stack Layer Technology Purpose Frontend Next.js 14 + Vercel v0 Rapid UI generation, server components Styling Tailwind CSS + shadcn/ui Production-ready components, dark mode Database Amazon DynamoDB Atomic counters, single-digit millisecond latency Payments Stripe Connect Direct payouts, automatic fee collection Authentication NextAuth.js Google OAuth + Magic Links AI Vercel AI SDK + OpenAI AI-generated flyers and captions Deployment Vercel Serverless, global CDN

The Database Design I designed a single-table DynamoDB schema to handle all operations with sub-10ms latency:

Table: EventFlow PK: Partition Key | SK: Sort Key | GSI1: SK → PK (for user→events queries) Entities:

  • EVENT#{id} → METADATA (event details)
  • EVENT#{id} → TIER#{tierId} (ticket tiers with available_count)
  • EVENT#{id} → TICKET#{ticketId} (individual tickets)
  • USER#{id} → PROFILE (user details)
  • ORDER#{orderId} → METADATA (payment records)
  • RESERVATION#{id} → METADATA (temporary holds with TTL)

The Atomic Counter Pattern: Javascript // Zero oversell guarantee — atomic decrement await dynamodb.update({ TableName: "EventFlow", Key: { PK: EVENT#${eventId}, SK: TIER#${tierId} }, UpdateExpression: "SET available_count = available_count - :dec", ConditionExpression: "available_count > :zero", ExpressionAttributeValues: { ":dec": 1, ":zero": 0 } });

Key Insight: This single operation is atomic at the DynamoDB level. If 1,000 users hit "Buy" simultaneously, DynamoDB serializes writes internally and stops exactly when stock hits zero. No locks, no external cache, no race conditions.

Milestone 3: The First Components (June 2026) v0-Powered UI Generation I used Vercel v0 to generate the core UI components with targeted prompts: Prompt 1: Organizer Dashboard Generate a Next.js React Server Component for an event organizer dashboard. It should have a sidebar with navigation, a revenue chart, key metrics cards, and a list of recent events as cards. Use shadcn/ui components.

Prompt 2: Public Event Landing Generate a Next.js React Server Component for a public event landing page. Show a hero section with event title, date, venue map, ticket tier selector with live availability, and a sticky "Buy Tickets" button.


Prompt 3: QR Scanner
Generate a Next.js client component for a QR code scanner using getUserMedia.
Show a viewfinder overlay, validation results with green/red feedback,
and a manual fallback input.

Results:
 Full dashboard with sidebar navigation
 Event cards with live inventory counts
 QR scanner with camera access and manual fallback
Dark mode support with next-themes

 Milestone 4: Integrations (June 2026)
Stripe Connect
I integrated Stripe Connect to handle payments and payouts:
· Standard Accounts: Organizers onboard via Stripe's hosted flow
· Application Fees: 2.5% + $0.30 automatically deducted from each transaction
· Destination Charges: Funds flow directly from attendee → organizer's bank account

Webhook Configuration:
Endpoint: /api/webhooks/stripe
Events: payment_intent.succeeded, payment_intent.payment_failed
Fee Structure:
javascript
const paymentIntent = await stripe.paymentIntents.create({
  amount: totalAmount,
  currency: 'usd',
  application_fee_amount: platformFee, // 2.5% + $0.30
  transfer_data: {
    destination: organizerStripeAccountId,
  },
});

Amazon DynamoDB (Vercel Integration)
I provisioned the DynamoDB table directly through the Vercel Marketplace — zero configuration required:
Table: EventFlow
Billing Mode: PAY_PER_REQUEST
Primary Key: PK (String), SK (String)
Global Secondary Index: GSI1 (SK → PK)

Milestone 5: AI-Powered Features (June 22, 2026)
AI Flyer Generator
Using the Vercel AI SDK + OpenAI GPT-4, I built a flyer generator that turns an event name and theme into marketing assets in seconds:
API Route:

Javascript
// /api/ai/generate-flyer
export async function POST(req: Request) {
  const { eventName, theme } = await req.json();
  const { text } = await generateText({
    model: openai('gpt-4-turbo'),
    prompt: `Generate a marketing flyer copy and DALL-E prompt 
             for an event called "${eventName}" with theme "${theme}".`,
  });
  return Response.json(JSON.parse(text));
}

User Experience:
1. Organizer enters event name + selects theme (e.g., "Retro 80s", "Minimalist")
2. GPT-4 generates marketing copy and a DALL-E prompt
3. Replicate generates a 1024x1024 image
4. Flyer auto-populates into the event's media slot

Result: Professional marketing assets in seconds — no design skills required.

Milestone 6: The Check-in Experience (June 23, 2026)
QR Code Scanner
I built a production-ready QR scanner for day-of-event check-in:
Features:
Camera access with viewfinder overlay
 Dynamic QR codes (refresh every 30 seconds to prevent screenshot fraud)
Real-time validation (green/red feedback + sound)
Manual fallback for hard-to-scan tickets
 Offline mode — Service worker caches valid hashes for the event

Validation Flow:
javascript
// /api/tickets/scan
const ticket = await dynamodb.get({
  TableName: "EventFlow",
  Key: { PK: `EVENT#${eventId}`, SK: `TICKET#${ticketId}` }
});

if (ticket.status === 'paid' && !ticket.checkedInAt) {
  // Valid — mark as used
  await dynamodb.update({
    Key: { PK: `EVENT#${eventId}`, SK: `TICKET#${ticketId}` },
    UpdateExpression: "SET checkedInAt = :now",
    ExpressionAttributeValues: { ":now": new Date().toISOString() }
  });
  return { valid: true, name: ticket.buyerName };
} else {
  //  Invalid or already used
  return { valid: false, reason: ticket.status };
}

 Milestone 7: Testing & Validation (June 24-28, 2026)
The "Atomic Inventory" Test
Scenario: 500 concurrent users attempting to buy the last ticket
Setup:

· Event: "H0 Hackathon Demo Night"
· Tier: "Early Bird" — Capacity: 5
· Tool: k6 load testing

Result: Zero oversells — DynamoDB's atomic counter held firm. The 6th user received an inventory exhausted error.
Lighthouse Scores
· Performance: 94/100
· Accessibility: 100/100
· Best Practices: 100/100
· SEO: 100/100

Milestone 8: Current Feature Set
Organizer Dashboard
 Create events (4-step wizard)
Manage ticket tiers (add/remove/update)
 AI-powered flyer generation
 Real-time sales tracking
 Revenue charts (last 30 days)
 Attendee list with check-in status
 QR scanner (online + offline)
Payouts & transaction history
 Event settings & Stripe Connect

Attendee Experience
Browse events with search
Event details with venue map
 Live inventory counts (15-second polling)
 Atomic checkout (no oversells)
Transparent fee display (2.5% + $0.30)
 Stripe payment element
 Dynamic QR tickets (30-second refresh)
Add to Google/Apple Calendar
Email receipts with QR images

Backend
Atomic inventory (DynamoDB conditional updates)
 Stripe Connect (automatic payouts)
 Webhook handling (idempotent)
 Rate limiting (5 req/min per IP)
 Zod validation for all API requests
Global error boundary
 Service worker (offline support)

Next Steps
Feature Status Target
Multi-currency support Planned July 2026
Waitlist functionality  Planned July 2026
Advanced analytics Planned August 2026
Mobile apps (iOS/Android) Planned Q3 2026
Open source release Planned Q4 2026

Code Snippet Spotlight
Atomic Ticket Reservation:
```typescript
// POST /api/tickets/reserve
export async function POST(req: Request) {
  const { eventId, tierId, quantity } = await req.json();

  //  Atomic decrement — no race conditions!
  const result = await dynamodb.update({
    TableName: "EventFlow",
    Key: { PK: `EVENT#${eventId}`, SK: `TIER#${tierId}` },
    UpdateExpression: "SET available_count = available_count - :qty",
    ConditionExpression: "available_count >= :qty",
    ExpressionAttributeValues: {
      ":qty": quantity,
      ":zero": 0
    },
    ReturnValues: "UPDATED_NEW"
  });

  if (!result.Attributes) {
    throw new Error("Not enough tickets available");
  }

  // Create reservation with 10-minute TTL
  const reservationId = nanoid();
  await dynamodb.put({
    TableName: "EventFlow",
    Item: {
      PK: `RESERVATION#${reservationId}`,
      SK: "METADATA",
      eventId,
      tierId,
      quantity,
      expiresAt: Date.now() + 600000, // 10 minutes
      TTL: Math.floor((Date.now() + 600000) / 1000)
    }
  });

  return Response.json({ reservationId, expiresAt: Date.now() + 600000 });
}

 Links
· Live Demo: https://event-flow-fawn-kappa.vercel.app/
· GitHub Repository: https://github.com/Linkxee-Tech/event-flow
· Tech Stack: Next.js, Vercel v0, Amazon DynamoDB, Stripe Connect, Vercel AI SDK

Acknowledgments
· H0 Hackathon Team — For creating this challenge and providing the infrastructure
· Vercel — For v0 and the deployment platform
· AWS — For DynamoDB and the PAY_PER_REQUEST billing model
· Stripe — For Connect and seamless payment infrastructure
· OpenAI — For GPT-4 powering the AI flyer generator

This update was created for the purpose of participating in the H0: Hack the Zero Stack with Vercel v0 and AWS Databases hackathon. #H0Hackathon

EventFlow is live, scalable, and ready to serve independent creators worldwide.

Log in or sign up for Devpost to join the conversation.