Skip to content

Miniapp Monorepo Integration Changelog

Date: January 28, 2026 Status: ✅ Complete Migration Branch: miniapp-integration-final

Overview

Complete integration of the standalone miniapp-latest codebase into the emerge turbo monorepo. This migration consolidates the miniapp with shared database, environment management, and dependency patterns used across the monorepo.

Key Changes

1. Shared React Package (@emp/react)

Commit: 4a43be7df - feat(monorepo): create shared React package and unify dependencies

Created a new workspace package @emp/react to enforce a single React version (19.2.0) across all monorepo applications.

Files Added:

  • packages/react/package.json
  • packages/react/src/index.ts - Re-exports all React APIs
  • packages/react/src/dom.ts - Re-exports React DOM
  • packages/react/tsconfig.json
  • packages/react/README.md

Apps Updated:

  • apps/miniapp/package.json - Now uses @emp/react: workspace:*
  • apps/monitor/package.json - Now uses @emp/react: workspace:*
  • apps/emprops-studio/package.json - Now uses @emp/react: workspace:*

Benefits:

  • Single source of truth for React version
  • Prevents version drift across apps
  • Faster pnpm installs via deduplication
  • Can extend with shared hooks/contexts later
  • Explicit monorepo usage in imports (from '@emp/react')

2. DaimoPay Configuration Update

Commit: 4a43be7df (same as above)

Simplified DaimoPay Wagmi configuration to use getDefaultConfig which automatically configures all required chains.

File Changed: apps/miniapp/app/providers.tsx

Before:

typescript
// Manual chain configuration
const wagmiConfig = createConfig({
  connectors: [farcasterMiniApp()],
  chains: [arbitrum, base, bsc, celo, /* ... 12 chains */],
  transports: { /* manual transport config */ },
  ssr: true,
});

After:

typescript
// Automatic chain configuration
const wagmiConfig = createConfig(
  getDefaultConfig({
    appName: "EmProps Mini App",
    connectors: [farcasterMiniApp()],
    ssr: true,
  })
);

Benefits:

  • Automatically includes all Daimo-supported chains
  • Eliminates maintenance of manual chain list
  • Prevents missing chain errors

3. Database Integration

Commit: 022b02e35 - feat(miniapp): integrate with monorepo database and environment system

Replaced standalone Prisma setup with shared database client from @emergexyz/db.

File Changed: apps/miniapp/lib/prisma.ts

Before:

typescript
// Standalone Prisma client
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();

After:

typescript
// Re-export from shared database package
export { prisma } from "@emergexyz/db";

export type {
  PrismaClient,
  miniapp_user,
  miniapp_generation,
  // ... all types
} from "@emergexyz/db";

export {
  Prisma,
  EmergeRewardStatus,
  GenerationStatus,
  // ... all enums
} from "@emergexyz/db";

Files Updated:

  • apps/miniapp/package.json:
    • Added: "@emergexyz/db": "workspace:*"
    • Removed: "@prisma/client", "prisma", "postinstall" script
  • apps/miniapp/.gitignore:
    • Added: lib/generated/, prisma/
  • apps/miniapp/tsconfig.json:
    • Removed: "lib/generated/prisma/*" from includes

Database Schema Location:

  • Schema: packages/database/prisma/schema.prisma (shared across monorepo)
  • Migrations: packages/database/prisma/migrations/
  • Client generation: packages/database (centralized)

4. Environment Configuration System

Commit: 022b02e35 (same as above)

Integrated miniapp with the monorepo's environment management system.

Files Created:

  • config/environments/services/miniapp.interface.ts - Service interface defining required/optional env vars
  • config/environments/components/miniapp.env - Component configuration with MINIAPP namespace

Files Updated:

  • config/environments/profiles/local.json - Added miniapp to local profile
  • config/environments/profiles/staging.json - Added miniapp to staging profile
  • config/environments/profiles/production.json - Added miniapp to production profile

Environment Variable Pattern:

typescript
// SERVICE INTERFACE (miniapp.interface.ts)
export const MiniappEnvInterface = {
  name: "miniapp",
  location: "apps/miniapp",
  required: {
    "DATABASE_URL": "postgresql://...",
    "REDIS_URL": "REDIS_URL",
    "NEXT_PUBLIC_URL": "MINIAPP_NEXT_PUBLIC_URL",
    // ... all required vars
  },
  defaults: {
    "PORT": "3337"
  }
};

// COMPONENT CONFIG (miniapp.env)
MINIAPP_APPLICATION_NAME="miniapp"
MINIAPP_VERSION="0.1.0"
MINIAPP_NEXT_PUBLIC_URL="https://miniapp.emprops.ai"
MINIAPP_DOMAIN="miniapp.emprops.ai"

Environment Build Process:

bash
# Build environment files for miniapp
bash scripts/build-env.sh local      # Creates .env.local
bash scripts/build-env.sh staging    # Creates .env.staging
bash scripts/build-env.sh production # Creates .env.production

5. Build Scripts

Commit: f0a24436b - chore(monorepo): update root package.json with miniapp build scripts

Added convenience scripts to root package.json for building and typechecking miniapp.

Scripts Added:

json
{
  "build:miniapp": "turbo run build --filter=@emp/miniapp",
  "build:miniapp:prod": "CURRENT_ENV=production turbo run build --filter=@emp/miniapp",
  "typecheck:miniapp": "turbo run typecheck --filter=@emp/miniapp"
}

Usage:

bash
# Development
pnpm dev:miniapp

# Build
pnpm build:miniapp           # Development build
pnpm build:miniapp:prod      # Production build

# Type checking
pnpm typecheck:miniapp

6. Type Fixes

Commit: 4a43be7df (shared React package commit)

Fixed Prisma JsonValue type usage in collections API.

File Changed: apps/miniapp/app/api/collections/[id]/generations/route.ts

Before:

typescript
import { Prisma } from "@/lib/prisma";
const JsonValue = Prisma.JsonValue;

interface CollectionGeneration {
  input_data?: JsonValue | null;
  token_metadata: JsonValue | null;
  friends: JsonValue | null;
}

After:

typescript
import { Prisma, prisma } from "@/lib/prisma";

interface CollectionGeneration {
  input_data?: Prisma.JsonValue | null;
  token_metadata: Prisma.JsonValue | null;
  friends: Prisma.JsonValue | null;
}

Package Renames

  • emerge-mini-app@emp/miniapp
  • Follows monorepo naming convention with @emp/ scope

Removed Files

The following standalone configuration files were removed as they're now handled by the monorepo:

  • apps/miniapp/.env.docker
  • apps/miniapp/docker-compose.yml
  • apps/miniapp/scripts/dev.js
  • apps/miniapp/lib/db-types.ts (replaced by @emergexyz/db types)

Dependencies Updated

Added

  • @emp/react: workspace:* - Shared React package
  • @emergexyz/db: workspace:* - Shared database client

Removed

  • react: 19.1.2 → now via @emp/react
  • react-dom: 19.1.2 → now via @emp/react
  • @types/react: ^18 → now via @emp/react
  • @types/react-dom: ^18 → now via @emp/react
  • @prisma/client: ^6.13.0 → now via @emergexyz/db
  • prisma: ^6.15.0 → managed in packages/database

Migration Pattern

This integration follows the exact same pattern used by other monorepo apps:

  1. Database: Use @emergexyz/db workspace package (NOT standalone Prisma)
  2. Environment: Use config system at config/environments/
  3. Build Exclusion: Exclude from default turbo build (requires explicit filter)
  4. Shared Dependencies: Use workspace packages for React, database, utilities

Reference Apps

  • apps/miniapp - Now follows this pattern ✅
  • apps/monitor - Reference implementation
  • apps/emprops-studio - Reference implementation
  • apps/api - Reference implementation

Verification Steps

After integration, verify the setup:

bash
# 1. Clean install
pnpm install

# 2. Generate Prisma client
cd packages/database
pnpm db:generate

# 3. Build environment
bash scripts/build-env.sh local

# 4. Type check
pnpm typecheck:miniapp
# Expected: All types resolve correctly

# 5. Build test
pnpm build:miniapp
# Expected: Build succeeds

# 6. Development server
pnpm dev:miniapp
# Expected: Server starts on port 3337, no import errors

Breaking Changes

For Developers

  1. React imports must now use @emp/react:

    typescript
    // ❌ Old
    import { useState } from 'react';
    
    // ✅ New
    import { useState } from '@emp/react';
  2. Prisma imports must use shared package:

    typescript
    // ❌ Old
    import { prisma } from './lib/generated/prisma';
    
    // ✅ New
    import { prisma } from '@/lib/prisma';
  3. Environment variables must be built:

    bash
    # Required before running miniapp
    bash scripts/build-env.sh local

Rollback Strategy

If issues arise, rollback is straightforward:

bash
# Revert to pre-integration state
git checkout miniapp-integration-final~3

# Or cherry-pick specific fixes forward
git cherry-pick <commit-sha>

Success Criteria

All success criteria met:

  • pnpm typecheck:miniapp passes
  • pnpm build:miniapp succeeds
  • pnpm dev:miniapp starts server
  • ✅ Database queries work
  • ✅ Environment variables load
  • ✅ No standalone Prisma artifacts
  • ✅ Follows exact miniapp integration pattern

Timeline

  • Planning: January 27, 2026
  • Implementation: January 28, 2026
  • Completion: January 28, 2026 (1 day)

Contributors

  • Claude Sonnet 4.5 (Integration implementation)
  • Sandy Corsillo (Project oversight and validation)

Released under the MIT License.