[Tech Blog] From Dashboard to Platform: Monorepo & The 'Verification' Strategy
[Tech Blog] From Dashboard to Platform: Monorepo & The 'Verification' Strategy
Date: 2026-01-07
Author: Yongrak Park (Beauty Insight Lab)
🏗️ Why We Moved to Monorepo?
As Beauty Insight Lab evolves from a simple dashboard into a comprehensive "K-Beauty Export Acceleration Platform", our architecture needed to mature. We managed the frontend and backend in separate silos, but today we unified them into a Monorepo.
The 'Beauty Inside Lab MVP' Architecture
beauty-inside-lab-mvp/
├── frontend/ (Next.js 16 App Router)
│ ├── Dashboard (Data Visualization)
│ └── Localization Tool (Client Interface)
└── backend/ (Python FastAPI)
└── Translation Agent (LLM Logic)
Benefits:
- Atomic Commits: We can change the API contract in the backend and update the frontend type definitions in a single commit.
- Unified Context: The "Verification" logic exists in both the UI (Green Signal) and the Agent (Reasoning), making it easier to sync the logic.
- Developer Experience: One repository, one efficient workflow.
🧠 The 'Verification' Strategy: Beyond Translation
2026's US skincare market is driven by "Clean Clinical" and "Scientific Proof". Users don't just want English; they want Credibility.
The "Why This Works?" Feature
We implemented a unique feature in our Localization Tool: Strategy Extraction.
When the AI transcreates "순한 앰플" (Mild Ampoule) to "Dermatologist-tested Ampoule", it doesn't just swap words. It provides a structured rationale:
- "Replaced abstract 'Mild' with verifiable 'Dermatologist-tested' to align with 2026 transparency trends."
Technical Implementation: The Proxy Pattern
To verify this, we connected our Next.js Frontend to the Python Backend using a Proxy Pattern:
- Client: Calls
/api/localization(Same origin, no CORS issues). - Next.js Proxy: Normalizes data.
- Challenge: Python sends
snake_case("strategy_points"), Frontend expectscamelCase("strategyPoints"). - Solution: The Proxy acts as an Adapter, mapping keys on the fly.
- Challenge: Python sends
- Backend: Executes the LLM Chain-of-Thought.
// app/api/localization/route.ts (The Adapter)
const normalizedData = {
...data,
targetText: data.result || data.target_text, // Flexible mapping
strategyPoints: data.strategy_points || []
};🚀 What's Next?
We are now preparing to deploy this integrated Monorepo to Vercel (Frontend) and a GPU-enabled cloud (Backend). The "Beauty Insight Lab" is no longer just a tracker; it's becoming an active agent in the export lifecycle.
Beauty Insight Editor
Sharing insights on K-Beauty trends and data-driven export strategies. We help brands expand globally with the power of AI.