Skip to content

GregPetropoulos/Event-Pulse

Repository files navigation

⚛️ EventPulse — Local Events + AI Insights (Expo + Zustand + MMKV Edition)

🎯 Summary

EventPulse is a real-time local event discovery app that surfaces upcoming concerts, festivals, meetups, and shows based on the user’s live location.

It integrates real event APIs (Ticketmaster or Eventbrite), AI-generated summaries, and offline favorites — all wrapped in a smooth Expo + React Native experience.

Goal: When a user downloads the app, they instantly see real nearby events, view AI summaries, and experience my engineering quality firsthand — without logging in or setting up anything.

🧩 Core Tech Stack

Category Library / Tool Why It’s Chosen
Framework Expo SDK 54+ Simplifies deployment, native modules, OTA updates
State Zustand Lightweight, modern, and clean state management
Storage react-native-mmkv (Expo-compatible build) Ultra-fast offline storage for favorites and cache
Networking react-query or axios Efficient async caching + retry logic
Maps react-native-maps (via Expo config plugin) Native maps integration for location + events
AI Integration OpenAI API Real AI summaries and recommendations
Animations react-native-reanimated + moti High-performance, Expo-ready animations
Styling nativewind Tailwind-based utility styling for rapid UI
Notifications expo-notifications Local reminders for saved events
Calendar expo-calendar Native calendar integration
Permissions expo-location, expo-permissions Handles GPS + calendar access
Charts victory-native or react-native-svg-charts Data visualization for insights
Testing Jest + Testing Library Lightweight test coverage for key flows

🏗️ Architecture (Expo-Optimized)

/src
 ├── api/              # external APIs (Eventbrite, Ticketmaster, OpenAI)
 ├── components/       # reusable UI components (cards, modals, buttons)
 ├── features/
 │    ├── map/         # map view + location-based event fetching
 │    ├── events/      # event list + details
 │    ├── ai/          # AI summaries and suggestions
 │    ├── favorites/   # offline saved events
 │    └── showcase/    # "About this app" for recruiters
 ├── hooks/            # useLocation, useAIInsights, useEvents, etc.
 ├── store/            # Zustand stores
 ├── utils/            # helpers (formatters, error handlers)
 ├── navigation/       # tab + stack navigation
 └── assets/           # icons, images, fonts

Architecture Pattern:🧱 Feature-based modular + Clean layering→ Scalable, testable, and demonstrates modern engineering discipline.

📱 Screen-by-Screen Breakdown

1️⃣ Splash / Intro Screen

Purpose: Establish visual polish and smooth entry.

UI Concept:

  • Animated logo (using Moti + Reanimated)
  • Fades into Home/Map screen after 1.5s

Skills Demonstrated:

  • Expo splash & font loading
  • Animation sequencing (Reanimated)
  • Clean transitions

2️⃣ Home / Map Screen

Purpose: Instant “wow” with live data and motion.

UI Concept:

  • Interactive map using react-native-maps
  • Pins for real events near the user’s location
  • Bottom sheet showing nearby events list (Reanimated + Gesture Handler)
  • Category filter (music, sports, festivals, etc.)

Skills Demonstrated:

  • Native module config via Expo plugin
  • Real API data fetching (Eventbrite/Ticketmaster)
  • Location permissions via expo-location
  • Reactive state with Zustand
  • Declarative UI motion

3️⃣ Event Details Screen

Purpose: Show real API integration + AI augmentation.

UI Concept:

  • Event banner image, title, venue, time
  • AI-generated summary using OpenAI (based on description + tags)
  • Buttons: “Add to Calendar,” “Remind Me,” “Open in Maps,” “Save”

Skills Demonstrated:

  • OpenAI integration (custom prompts)
  • Native calendar & map linking via Expo APIs
  • Local persistence with MMKV
  • Error + loading management with React Query
  • Data transformation logic

4️⃣ Favorites / Offline Screen

Purpose: Demonstrate persistence, caching, and background jobs.

UI Concept:

  • List of saved events (stored in MMKV)
  • Offline availability
  • Option to set reminders via expo-notifications

Skills Demonstrated:

  • MMKV-based data storage
  • Persistent Zustand store with middleware
  • Notifications via Expo
  • Offline UX with fallback UI states

5️⃣ AI Insights Screen

Purpose: Show off intelligent personalization and real-time data processing.

UI Concept:

  • “AI Suggestions” like:“You seem to like live music — here are top 3 shows this week.”
  • Pulls context from favorited events + current city
  • Uses OpenAI or HuggingFace for text generation
  • Animated list reveal (Moti)

Skills Demonstrated:

  • Prompt design and AI integration
  • Context-based content generation
  • Async request orchestration
  • Advanced animations
  • Combining user data + external data meaningfully

6️⃣ Showcase / About Screen

Purpose: A meta tab for employers.

UI Concept:

  • Animated logos for Expo, Zustand, MMKV, Reanimated
  • Architecture diagram rendered via SVG
  • Buttons: “View Source,” “LinkedIn,” “Portfolio”
  • AI-generated summary describing the app

Skills Demonstrated:

  • Self-documenting engineering
  • SVG rendering
  • Multi-platform linking (mailto, external)
  • Modern branding polish

🧠 Skill Demonstration Summary

Skill Area Feature Demonstrated
Expo Expertise OTA updates, managed workflow, Expo APIs (Location, Calendar, Notifications)
State Management Centralized global store with Zustand + persistence middleware
Performance Optimization MMKV for fast, synchronous reads/writes
AI Integration OpenAI text generation for event insights
Real API Workflows Eventbrite/Ticketmaster live data with error handling
Offline-First Design MMKV cache + background event sync
Animation Polish Reanimated & Moti for transitions
Native Integrations Calendar, Notifications, Deep Linking
Data Visualization Event analytics charts via victory-native
Professional Storytelling Showcase tab + clean architecture

🧱 Expo-Friendly Data Flow

flowchart TD
    A[User Interaction] --> B[Zustand Store]
    B --> C[React Query / Axios]
    C --> D1[Eventbrite API]
    C --> D2[OpenAI API]
    B --> E[MMKV Storage]
    B --> F[UI Components]
    F --> G["Expo Native APIs (Location, Calendar, Notifications)"]
Loading

This structure shows scalable separation of concerns, and interviewers will immediately recognize it as a production-grade architecture.

🗓️ 3-Month Sprint Plan (Expo Timeline)

Phase Duration Deliverables Key Focus
Phase 1: Core Infrastructure Weeks 1–3 Expo setup, Zustand store, Maps + Location Foundation, modular setup
Phase 2: Events API Integration Weeks 4–6 Fetch + cache real events, Event Details screen Networking, API integration
Phase 3: AI + Offline Mode Weeks 7–9 AI summaries, Favorites, MMKV persistence AI, data persistence
Phase 4: UX & Polish Weeks 10–12 Animations, Showcase tab, notifications, store build Visual polish, deployability

🎨 UI Style Guide

  • Theme: Dark + glassmorphic
  • Primary Colors: #1E293B (slate) + accent gradient per category
  • Font: Inter (Expo Google Fonts)
  • Layout: Bottom tabs → Map / AI / Favorites / Showcase
  • Animations: Smooth fade/slide transitions via Moti/Reanimated
  • Interaction: Scrollable bottom sheet with spring animation

🧩 Deliverables for Portfolio

  • 📱 App on Play Store + App Store (Expo EAS build)
  • 💻 Public GitHub repo with modular architecture and clean commits
  • 🎥 30-second demo reel (show map, AI insights, smooth transitions)
  • 🧾 README with architecture diagram and short tech write-up

Developer Specific

Commands

Android

  • adb devices
  • ./gradlew clean
  • ./gradle --stop
  • ps -A | grep gradle find all running dameons
  • sudo kill -9 (Kill the process with this command)

Local Android Builds

  • Android APK no eas preview environment

    1. APP_ENV=preview npx expo prebuild --clean
    1. APP_ENV=preview npx expo run:android --variant release
  • Dev environment defaults to debug apk

    1. npx expo prebuild --clean
    1. npx expo run:android

EAS

  • npx eas build -p ios --clear-cache
  • npx eas build -p android --clear-cache

Core Build Commands:

  • eas build : This command initiates a new build for your project. By default, it targets the production profile, suitable for app store submissions.

  • eas build --profile development --platform [android|ios]: Creates a development build, which is a development client that loads JavaScript from your local machine. This is ideal for active development and debugging.

  • eas build --profile preview --platform [android|ios]: Creates a preview build, which is a standalone, installable application (APK for Android, IPA for iOS) without the development client. This is useful for sharing with clients or for internal testing.

  • eas build --local: Runs any eas build command on your local machine instead of on EAS servers. This is helpful for debugging build failures or for local testing.

Metro for Local

  • npx expo start --clear

Jest Testing

  • npm test
  • npm test -- --watch
  • npx jest --clearCache
  • rm -rf node_modules/.cache

Quick Clear Cache

expo cli clear cache

  • rm -rf node_modules
  • npm cache clean --force
  • npm install
  • watchman watch-del-all
  • rm -fr $TMPDIR/haste-map-*
  • rm -rf $TMPDIR/metro-cache
  • npx expo start --clear

OR

  • npm run reste:cache
  • npx expo start --clear

Troubleshooting

  1.    A problem occurred evaluating settings 'android'.
       > A problem occurred starting process 'command 'node''
    
  2. Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES posiibly due to running builds (no eas) on simulator then on usb device. The type of usb cable was also an issue for others in link below https://stackoverflow.com/questions/2914105/what-is-install-parse-failed-no-certificates-error

    • rm -rf node_modules
    • rm package-lock.json
    • rm -rf $TMPDIR/haste-map-*
    • rm -rf $TMPDIR/metro-cache
    • watchman watch-del-all
    • npm cache clean -f
    • Make sure Android studio is closed
    • uninstall any trace from phone
    • npm i
    • npx expo install --check
    • npx expo-doctor
    • npx expo run:android
  3. Peer deps check

    • npm ls react react-test-renderer (had to downgrade this to react 19.1, it wanted react 19.2)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published