Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

557 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Wakeve - Collaborative Event Planning

License Status OpenSpec Platforms

Wakeve is a collaborative event planning application for groups that need one place to decide when to meet, who is coming, what the plan is, and what still needs organizing. It combines Kotlin Multiplatform shared logic, Android Compose, native SwiftUI iOS, a Ktor backend, offline-first persistence, and OpenSpec-driven release tracking.

🎯 Features

Current Roadmap State

The project is beyond the original Phase 2/Phase 3 README plan. Current source-of-truth tracking lives in ROADMAP.md, openspec/specs/, and the active OpenSpec changes.

Active changes:

Change Status Remaining blocker
add-event-weather-forecast 20/22 tasks WeatherKit Apple Developer capability, signed entitlement, and physical-device WeatherKit validation.
add-on-device-wakeve-ai 40/41 tasks Supported physical-device profiling for Foundation Models latency, cancellation, memory, and production-log privacy.

Recent archived roadmap work includes Android AI workflows, Android adaptive UI, contact participant selection, scenario matrix voting, web microfrontends, account deletion, UGC moderation, iOS brand identity, and create-event slot previews.

Implemented Capabilities

βœ… Event Organization

  • Create events with multiple time slot options
  • Invite participants and manage RSVPs
  • Real-time availability polling
  • Weighted voting system (YES=2, MAYBE=1, NO=-1)
  • Automatic best-time calculation
  • Offline-first database persistence
  • DRAFT β†’ POLLING β†’ CONFIRMED β†’ ORGANIZING β†’ FINALIZED workflow coordination

βœ… Virtual Meetings

  • MeetingService with support for Zoom, Google Meet, FaceTime
  • Secure meeting link generation via backend proxy
  • Meeting invitation and reminder scheduling
  • Integration with native calendar
  • Meeting lifecycle management (create, update, cancel, start, end)

βœ… Multiplatform Support

  • Android with Jetpack Compose UI
  • iOS with native SwiftUI app, shared KMP integration, App Store readiness evidence, and WeatherKit/WakeveAI work in progress
  • JVM/Desktop support
  • Single shared codebase via Kotlin Multiplatform

βœ… Backend Infrastructure

  • Production-ready Ktor REST API
  • SQLDelight type-safe database
  • Event, meeting, auth, moderation, calendar, and organization APIs
  • Role-based access control
  • Secure API key management for external platforms

βœ… Release Readiness

  • App Store blocker register and final signoff workflow
  • Local privacy, accessibility, media, license, export, live URL, and Store metadata evidence docs
  • Account deletion and UGC moderation implementations archived after local validation
  • Critical release gate scripts for OpenSpec, iOS metadata, web, and selected regression tests

πŸš€ Quick Start

# Clone repository
git clone https://github.com/guyghost/wakeve.git
cd wakeve

# Build and test
./gradlew build
./gradlew :shared:jvmTest
openspec validate --all --strict

# Start server
./gradlew server:run   # http://localhost:8080

# Android uses https://api.wakeve.app by default.
# For emulator-local backend development, add this to local.properties:
# server.url=http://10.0.2.2:8080

# Build Android app
./gradlew :composeApp:assembleDebug

See QUICK_START.md for detailed setup instructions.

πŸ“ Project Structure

wakeve/
β”œβ”€β”€ shared/               # Kotlin Multiplatform shared code
β”‚   β”œβ”€β”€ src/commonMain/  # Cross-platform models & logic
β”‚   β”œβ”€β”€ src/jvmTest/     # JVM-specific tests
β”‚   └── sqldelight/      # Type-safe database schema
β”œβ”€β”€ composeApp/          # Android app with Jetpack Compose
β”œβ”€β”€ server/              # Ktor REST backend server
β”œβ”€β”€ iosApp/              # Native iOS app and Xcode project
β”œβ”€β”€ openspec/            # Specification documents
└── docs/                # Documentation

πŸ—οΈ Architecture

Multiplatform Layers

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  UI Layer (Compose/SwiftUI)         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Business Logic (EventRepository)   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Persistence (SQLDelight)           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Platform Drivers (Android/iOS/JVM) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture Pattern: Functional Core & Imperative Shell (FC&IS)

Wakeve follows the Functional Core, Imperative Shell pattern to ensure testability and separation of concerns:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    IMPERATIVE SHELL                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Services (MeetingService, EventRepository)      β”‚  β”‚
β”‚  β”‚  State Machines (MVI FSM)                      β”‚  β”‚
β”‚  β”‚  External APIs (MeetingProxyRoutes)              β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  Handles side effects: I/O, async, state mutations   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     FUNCTIONAL CORE                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Pure Functions (logic, validators, transforms)  β”‚  β”‚
β”‚  β”‚  Domain Models (Event, Meeting, Vote)           β”‚  β”‚
β”‚  β”‚  Business Rules (scoring, eligibility)           β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  No side effects, 100% testable                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Principles:

  • βœ… Shell CAN call Core
  • βœ… Core CANNOT call Shell
  • βœ… Core ignores Shell's existence
  • βœ… Pure functions in Core are easily testable
  • βœ… Side effects isolated in Shell (database, network, API)

See docs/architecture/meeting-service.md for detailed MeetingService architecture.

Key Technologies

  • Language: Kotlin 2.2.20 with Multiplatform support
  • UI: Jetpack Compose (Android), SwiftUI (iOS)
  • Database: SQLDelight with type-safe queries
  • Backend: Ktor 3.3.1 REST server
  • Testing: Kotlin test, XCTest, OpenSpec validation, release gate scripts
  • Serialization: kotlinx-serialization for JSON

πŸ“Š Project Statistics

Metric Value
Roadmap Status Active release hardening
Active OpenSpec Changes 2
Validated Specs/Changes 26/26 with openspec validate --all --strict
Shared Test Files 92 common test files
Android Test Files 85 Compose test files
iOS Test Files 28 XCTest files
Supported Platforms Android, iOS, JVM/server
Current External Blockers App Store/live infrastructure, signed-device WeatherKit, WakeveAI real-device profiling

πŸ“– Documentation

Getting Started

Complete Documentation

For comprehensive documentation, visit docs/:

OpenSpec

πŸ”§ Development

Prerequisites

  • Java 11+
  • Kotlin 2.2.20
  • Gradle 8.14+
  • Android SDK (for Android development)
  • Xcode with an available iOS simulator (for iOS development)

Build Commands

# Run shared JVM tests
./gradlew :shared:jvmTest

# Run specific test
./gradlew :shared:jvmTest --tests "EventRepositoryTest"

# Build Android app
./gradlew :composeApp:assembleDebug

# Start server
./gradlew :server:run

# Format code
./gradlew spotlessApply

πŸ§ͺ Testing

Wakeve has comprehensive test coverage:

EventRepositoryTest          10 tests
PollLogicTest               6 tests
DatabaseEventRepositoryTest 13 tests
OfflineScenarioTest         7 tests
───────────────────────────────────
Unit Tests                  36 tests βœ…

PrdWorkflowE2ETest          6 tests
ServiceIntegrationE2ETest    5 tests
MultiUserCollaborationTest   10 tests
DeleteEventE2ETest           6 tests
AuthFlowE2ETest              4 tests
───────────────────────────────────
E2E Tests                  35 tests βœ…

TOTAL                      71 tests βœ…

All tests cover:

  • βœ… Event creation and lifecycle
  • βœ… Participant management
  • βœ… Vote submission and aggregation
  • βœ… Database persistence
  • βœ… Offline data recovery
  • βœ… API endpoints
  • βœ… Complete PRD workflow (DRAFT β†’ FINALIZED)
  • βœ… Multi-user collaboration scenarios
  • βœ… Virtual meeting link generation
  • βœ… Service integration (Budget, Transport, Meeting, Suggestion)

πŸ“‘ REST API

Event Endpoints

GET    /health                    # Health check
GET    /api/events                # List all events
GET    /api/events/{id}           # Get event details
POST   /api/events                # Create event
PUT    /api/events/{id}/status    # Update event status
GET    /api/events/{id}/participants   # List participants
POST   /api/events/{id}/participants   # Add participant
GET    /api/events/{id}/poll      # Get poll results
POST   /api/events/{id}/poll/votes    # Submit vote

Meeting Proxy Endpoints (Secure)

POST   /api/meetings/proxy/zoom/create              # Create Zoom meeting
POST   /api/meetings/proxy/google-meet/create       # Create Google Meet meeting
POST   /api/meetings/proxy/zoom/{id}/cancel        # Cancel Zoom meeting
GET    /api/meetings/proxy/zoom/{id}/status        # Get Zoom meeting status

Security Note: Meeting proxy endpoints secure external API keys (Zoom, Google Meet) by handling all external API calls server-side.

See docs/API/meeting-api.md for detailed MeetingProxy API documentation.

Example: Create Event

WAKEVE_API_BASE="${WAKEVE_API_BASE:-https://api.wakeve.app}"

curl -X POST "$WAKEVE_API_BASE/api/events" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Team Meeting",
    "description": "Q4 Planning",
    "organizerId": "user-1",
    "deadline": "2025-11-20T18:00:00Z",
    "proposedSlots": [{
      "id": "slot-1",
      "start": "2025-12-01T10:00:00Z",
      "end": "2025-12-01T12:00:00Z",
      "timezone": "UTC"
    }]
  }'

πŸ” Security

Current

  • OAuth/email/guest authentication flows in shared and platform code
  • Role-based access control for organizer and participant behavior
  • Account deletion flow implemented and locally validated
  • UGC moderation, reporting, blocking, and review controls implemented and archived
  • Store-readiness checks for privacy manifests, logging hygiene, live URL/AASA evidence, App Review notes, and release signoff markers

πŸ“± Platform Support

Android

  • UI Framework: Jetpack Compose
  • Target: API 24+
  • Build: ./gradlew :composeApp:assembleDebug

iOS

  • Framework: SwiftUI with shared KMP framework integration
  • Project: iosApp/iosApp.xcodeproj
  • Target: tracked in Xcode build settings
  • Database: Native SQLite driver

JVM/Server

  • Framework: Ktor REST server
  • Database: SQLDelight with JDBC driver
  • Run: ./gradlew server:run

🚦 Development Workflow

Creating a Feature

  1. Create feature branch: codex/<feature-name> for Codex work
  2. Follow OpenSpec process (see CONTRIBUTING.md)
  3. Write tests for all new code
  4. Submit PR with issue reference

Git Commit Format

<type>(optional-scope): <description>

<optional body>

Examples:

feat(events): add event creation API
fix(timezone): handle poll slot conversion
test(sync): add offline conflict scenarios

πŸ› Troubleshooting

Common Issues

Build Fails

./gradlew clean build  # Clean rebuild
java -version          # Verify Java 11+

Tests Failing

./gradlew :shared:jvmTest --info  # Verbose output
./gradlew :shared:jvmTest --tests "TestName" -d  # Debug mode

Server Won't Start

lsof -i :8080          # Check port 8080
./gradlew :server:run --info  # Debug mode

See QUICK_START.md for more solutions.

πŸ“‹ Workflow

Wakeve follows the OpenSpec specification-driven development process:

1. Create Issue β†’ 2. Create Proposal β†’ 3. Create Spec β†’ 
4. Get Approval β†’ 5. Implement with Tests β†’ 6. Merge & Deploy

See openspec/PROCESS.md for detailed workflow.

🀝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for:

  • Development setup
  • Code style guidelines
  • Testing requirements
  • Commit conventions
  • Pull request process

πŸ“ž Support

  • Issues: Create GitHub Issue for bugs/features
  • Discussions: Use GitHub Discussions for questions
  • Documentation: See full docs in repository
  • Email: Contact maintainers for security issues

πŸ“„ License

Wakeve is licensed under the MIT License. See LICENSE file for details.

πŸ™ Acknowledgments

Built with:

🎯 Vision

Wakeve's mission is to make collaborative scheduling effortless. By combining intelligent polling, automatic scheduling, and offline-first principles, we're building the event planning tool for distributed teams.


Ready to contribute? Start with QUICK_START.md and CONTRIBUTING.md!

Questions? Check openspec/ for detailed specifications and documentation.

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages