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.jsonpackages/react/src/index.ts- Re-exports all React APIspackages/react/src/dom.ts- Re-exports React DOMpackages/react/tsconfig.jsonpackages/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:
// Manual chain configuration
const wagmiConfig = createConfig({
connectors: [farcasterMiniApp()],
chains: [arbitrum, base, bsc, celo, /* ... 12 chains */],
transports: { /* manual transport config */ },
ssr: true,
});After:
// 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:
// Standalone Prisma client
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();After:
// 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
- Added:
apps/miniapp/.gitignore:- Added:
lib/generated/,prisma/
- Added:
apps/miniapp/tsconfig.json:- Removed:
"lib/generated/prisma/*"from includes
- Removed:
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 varsconfig/environments/components/miniapp.env- Component configuration with MINIAPP namespace
Files Updated:
config/environments/profiles/local.json- Added miniapp to local profileconfig/environments/profiles/staging.json- Added miniapp to staging profileconfig/environments/profiles/production.json- Added miniapp to production profile
Environment Variable Pattern:
// 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:
# 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.production5. 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:
{
"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:
# Development
pnpm dev:miniapp
# Build
pnpm build:miniapp # Development build
pnpm build:miniapp:prod # Production build
# Type checking
pnpm typecheck:miniapp6. 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:
import { Prisma } from "@/lib/prisma";
const JsonValue = Prisma.JsonValue;
interface CollectionGeneration {
input_data?: JsonValue | null;
token_metadata: JsonValue | null;
friends: JsonValue | null;
}After:
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.dockerapps/miniapp/docker-compose.ymlapps/miniapp/scripts/dev.jsapps/miniapp/lib/db-types.ts(replaced by@emergexyz/dbtypes)
Dependencies Updated
Added
@emp/react: workspace:*- Shared React package@emergexyz/db: workspace:*- Shared database client
Removed
react: 19.1.2→ now via@emp/reactreact-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/dbprisma: ^6.15.0→ managed inpackages/database
Migration Pattern
This integration follows the exact same pattern used by other monorepo apps:
- Database: Use
@emergexyz/dbworkspace package (NOT standalone Prisma) - Environment: Use config system at
config/environments/ - Build Exclusion: Exclude from default turbo build (requires explicit filter)
- Shared Dependencies: Use workspace packages for React, database, utilities
Reference Apps
apps/miniapp- Now follows this pattern ✅apps/monitor- Reference implementationapps/emprops-studio- Reference implementationapps/api- Reference implementation
Verification Steps
After integration, verify the setup:
# 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 errorsBreaking Changes
For Developers
React imports must now use
@emp/react:typescript// ❌ Old import { useState } from 'react'; // ✅ New import { useState } from '@emp/react';Prisma imports must use shared package:
typescript// ❌ Old import { prisma } from './lib/generated/prisma'; // ✅ New import { prisma } from '@/lib/prisma';Environment variables must be built:
bash# Required before running miniapp bash scripts/build-env.sh local
Rollback Strategy
If issues arise, rollback is straightforward:
# 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:miniapppasses - ✅
pnpm build:miniappsucceeds - ✅
pnpm dev:miniappstarts server - ✅ Database queries work
- ✅ Environment variables load
- ✅ No standalone Prisma artifacts
- ✅ Follows exact miniapp integration pattern
Related Documentation
- Environment Management Architecture
- Prisma Schema Consolidation ADR
- EmProps UI Monorepo Integration ADR
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)
