Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
86061af
feat(raw_posts): StarStyle.com adapter (#466) (#481)
cocoyoon May 7, 2026
efcb74f
chore: retrigger CI with bump label
cocoyoon May 7, 2026
4c0b3ff
fix(starstyle-backfill): mirror hero images to R2 before INSERT (#466…
cocoyoon May 7, 2026
3b5d5fc
Merge remote-tracking branch 'origin/main' into dev
cocoyoon May 7, 2026
47f31a8
feat(raw_posts): R2 cleanup on delete + storage rename (#466) (#486)
cocoyoon May 7, 2026
5443b42
feat(web): add vton item and post selection
thxforall May 7, 2026
23a7eb8
fix(web): use local supabase fallback for posts
thxforall May 7, 2026
6a0316a
fix(web): serve local vton seed images
thxforall May 7, 2026
2dbcdb5
fix(web): seed local post images for vton qa
thxforall May 7, 2026
8c57c3a
docs: design profile tries detail modal
thxforall May 7, 2026
8201801
feat(web): add try detail snapshots
thxforall May 7, 2026
b5ca3ea
fix(raw_posts): preserve vision log thumbnails (#490)
CIOI May 7, 2026
6647c59
fix(web): remove missing supabase client export (#491)
CIOI May 7, 2026
28da9df
feat(verify): R2 relocate raw → operation at verify time (#466) (#492)
cocoyoon May 8, 2026
910081f
fix(wiki): remove unknown tags (profile, vton) from profile-tries spe…
cocoyoon May 8, 2026
c53f0d4
Merge remote-tracking branch 'origin/main' into dev
cocoyoon May 8, 2026
0a08891
feat(cost-tracking): Gemini API per-call cost tracking + admin dashbo…
cocoyoon May 14, 2026
01b8c5a
feat(content-studio): AI-powered content generation pipeline (#498)
thxforall May 14, 2026
1b048cf
feat(admin): verify observability — stats page + daily-digest nag (#499)
cocoyoon May 14, 2026
b8dab14
merge: main into dev — resolve admin router/sidebar/home conflicts
cocoyoon May 14, 2026
006c967
feat(content-studio): DB persistence for local dev parity (#510)
thxforall May 14, 2026
5caf6cc
docs: Obsidian vault 전환 스펙 문서 3종 작성
thxforall May 14, 2026
d5755a7
feat(editorial): thumbnail regen button + pipeline error surfacing (#…
cocoyoon May 14, 2026
0b95cb2
chore(dx): dev-reset PRD seed + pre-push lint fixes (#525)
thxforall May 14, 2026
9a88c56
chore(release): backend bump ai=1.6.0 api=0.11.0 [skip ci]
May 14, 2026
8f37d04
fix(daily-digest): use single quotes for UUID array literals in psql …
cocoyoon May 14, 2026
39a9951
merge: main into dev — record main as merged (content already in dev …
cocoyoon May 14, 2026
7b13c87
docs: Obsidian vault 스펙 3종 Codex/Critic 리뷰 반영
thxforall May 14, 2026
e740fc8
chore: update OMC project memory state
thxforall May 14, 2026
43d397e
docs: Obsidian 전환 리서치 보고서 작성 및 스펙 참조 연결
thxforall May 14, 2026
dc9a708
docs: Obsidian vault 구현 계획 2종 작성
thxforall May 14, 2026
76ad523
feat: complete virtual try-on UX (#529)
thxforall May 14, 2026
9b8cfaa
feat: vault-dispatch workflow — cross-repo changelog
thxforall May 14, 2026
333263a
fix: keep vton modal above post detail drawer (#531)
thxforall May 14, 2026
7dfb9cb
fix: restore try-on photo upload (#534)
thxforall May 14, 2026
ea62282
ci(telegram): use [decoded-monorepo] prefix for source distinction
cocoyoon May 15, 2026
bb2253c
ci(telegram): use [decoded-monorepo] prefix for source distinction (#…
cocoyoon May 15, 2026
48f29be
fix(wiki): obsidian/telegram 태그 어휘 추가 + 스펙 frontmatter 정리
thxforall May 15, 2026
73d3a71
docs(routing): point planning content at decoded-docs vault
cocoyoon May 15, 2026
048a6ba
Merge remote-tracking branch 'origin/dev' into worktree-docs+obsidian…
thxforall May 15, 2026
a78cec5
Merge pull request #538 from decodedcorp/worktree-docs+obsidian-vault…
decodedapp May 15, 2026
90e27a0
Merge pull request #539 from decodedcorp/docs/route-to-decoded-docs
decodedapp May 15, 2026
51aa59f
feat(web/hero): add view editorial CTA + skip entry on revisit (#543)
cocoyoon May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions .github/workflows/telegram-notify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,19 @@ jobs:
SHA="${{ github.sha }}"
REF="${{ github.ref }}"

PREFIX="[decoded-monorepo]"

case "$EVENT_NAME" in
workflow_dispatch)
MSG="🔧 decoded — manual trigger by ${ACTOR}"
MSG="${PREFIX} 🔧 manual trigger by ${ACTOR}"
;;

push)
SHORT="${SHA:0:7}"
BRANCH="${REF#refs/heads/}"
COMMIT_MSG=$(jq -r '.head_commit.message // empty' "$GITHUB_EVENT_PATH" | head -1 | head -c 200)
COMMIT_URL="${SERVER}/${REPO}/commit/${SHA}"
MSG="📦 decoded push → ${BRANCH}
MSG="${PREFIX} 📦 push → ${BRANCH}
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
${SHORT} ${COMMIT_MSG}
by ${ACTOR}
Expand All @@ -65,7 +67,7 @@ jobs:
ADDITIONS=$(jq -r '.pull_request.additions // 0' "$GITHUB_EVENT_PATH")
DELETIONS=$(jq -r '.pull_request.deletions // 0' "$GITHUB_EVENT_PATH")
CHANGED=$(jq -r '.pull_request.changed_files // 0' "$GITHUB_EVENT_PATH")
MSG="🔀 decoded PR #${NUM}
MSG="${PREFIX} 🔀 PR #${NUM}
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
${TITLE}
${HEAD} → ${BASE}
Expand All @@ -81,7 +83,7 @@ jobs:
AUTHOR=$(jq -r '.issue.user.login' "$GITHUB_EVENT_PATH")
URL=$(jq -r '.issue.html_url' "$GITHUB_EVENT_PATH")
LABELS=$(jq -r '[.issue.labels[].name] | join(", ")' "$GITHUB_EVENT_PATH")
MSG="📌 decoded issue #${NUM}
MSG="${PREFIX} 📌 issue #${NUM}
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
${TITLE}
${LABELS:-no labels}
Expand Down Expand Up @@ -109,7 +111,7 @@ jobs:
LABEL="배포 실패"
fi

MSG="${ICON} decoded deploy — ${LABEL}
MSG="${PREFIX} ${ICON} deploy — ${LABEL}
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
env: ${ENV_NAME}
ref: ${DEPLOY_REF}
Expand Down
60 changes: 60 additions & 0 deletions .github/workflows/vault-dispatch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Vault dispatch
on:
push:
branches: [main, dev]
pull_request:
types: [opened, closed]
deployment_status:

permissions:
contents: read

jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: Build payload and dispatch
env:
GH_TOKEN: ${{ secrets.DOCS_DISPATCH_TOKEN }}
EVENT_NAME: ${{ github.event_name }}
EVENT_ACTION: ${{ github.event.action }}
ACTOR: ${{ github.actor }}
SHA: ${{ github.sha }}
REF: ${{ github.ref }}
run: |
set -eo pipefail

case "$EVENT_NAME" in
push)
SHORT="${SHA:0:7}"
BRANCH="${REF#refs/heads/}"
MSG=$(jq -r '.head_commit.message // ""' "$GITHUB_EVENT_PATH" | head -1 | head -c 200)
TYPE="push"
BODY="**${BRANCH}** ${SHORT} ${MSG} (by ${ACTOR})"
;;
pull_request)
NUM=$(jq -r '.pull_request.number' "$GITHUB_EVENT_PATH")
TITLE=$(jq -r '.pull_request.title' "$GITHUB_EVENT_PATH")
MERGED=$(jq -r '.pull_request.merged // false' "$GITHUB_EVENT_PATH")
if [ "$EVENT_ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then
TYPE="pr-merged"
else
TYPE="pr-${EVENT_ACTION}"
fi
BODY="**PR #${NUM}** ${TITLE} (${TYPE} by ${ACTOR})"
;;
deployment_status)
STATE=$(jq -r '.deployment_status.state' "$GITHUB_EVENT_PATH")
ENV_NAME=$(jq -r '.deployment_status.environment // "unknown"' "$GITHUB_EVENT_PATH")
[ "$STATE" != "success" ] && [ "$STATE" != "failure" ] && exit 0
TYPE="deploy-${STATE}"
BODY="**Deploy ${STATE}** env: ${ENV_NAME}"
;;
esac

gh api repos/decodedcorp/decoded-docs/dispatches \
-f event_type=git-event \
-f "client_payload[type]=${TYPE}" \
-f "client_payload[message]=${BODY}" \
-f "client_payload[actor]=${ACTOR}" \
-f "client_payload[sha]=${SHA}"
106 changes: 81 additions & 25 deletions .omc/project-memory.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"version": "1.0.0",
"lastScanned": 1776389561427,
"projectRoot": "/Users/kiyeol/development/decoded/decoded-monorepo",
"lastScanned": 1778751573234,
"projectRoot": "/Users/kiyeol/development/decoded/decoded-monorepo/.claude/worktrees/docs+obsidian-vault-spec",
"techStack": {
"languages": [
{
Expand Down Expand Up @@ -51,7 +51,10 @@
"test": "turbo run test",
"ci:local": "bash scripts/git-pre-push.sh",
"generate:api": "turbo run generate:api",
"deploy:backend": "bash scripts/deploy-backend.sh"
"deploy:backend": "bash scripts/deploy-backend.sh",
"wiki:lint": "bun tools/wiki/cli.ts lint",
"wiki:links": "bun tools/wiki/cli.ts links",
"wiki:ingest": "bun tools/wiki/cli.ts ingest"
}
},
"conventions": {
Expand Down Expand Up @@ -85,27 +88,27 @@
"path": "__tests__",
"purpose": "Test files",
"fileCount": 0,
"lastAccessed": 1776389561368,
"lastAccessed": 1778751573071,
"keyFiles": []
},
"docs": {
"path": "docs",
"purpose": "Documentation",
"fileCount": 9,
"lastAccessed": 1776389561368,
"fileCount": 11,
"lastAccessed": 1778751573072,
"keyFiles": [
"BACKEND-ONBOARDING.md",
"DATABASE-MIGRATIONS.md",
"GIT-WORKFLOW.md",
"README.md",
"backend-frontend-status.md",
"gstack-guide.md"
"LOCAL-DEV.md",
"README.md"
]
},
"nginx": {
"path": "nginx",
"purpose": null,
"fileCount": 2,
"lastAccessed": 1776389561408,
"lastAccessed": 1778751573120,
"keyFiles": [
"decoded.dev.conf",
"preview.decoded.style.conf"
Expand All @@ -115,14 +118,14 @@
"path": "packages",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1776389561411,
"lastAccessed": 1778751573124,
"keyFiles": []
},
"plans": {
"path": "plans",
"purpose": null,
"fileCount": 3,
"lastAccessed": 1776389561411,
"lastAccessed": 1778751573132,
"keyFiles": [
"partitioned-roaming-pine.md",
"whimsical-questing-rainbow-agent-a724aa4104b0d2aa9.md",
Expand All @@ -132,39 +135,56 @@
"scripts": {
"path": "scripts",
"purpose": "Build/utility scripts",
"fileCount": 12,
"lastAccessed": 1776389561412,
"fileCount": 21,
"lastAccessed": 1778751573147,
"keyFiles": [
"backfill-image-dimensions.py",
"deploy-backend.sh",
"git-pre-push.sh",
"list-posts-with-spots.mjs",
"local-be.sh"
"bump-backend-version.sh",
"check-db-drift.sh",
"db-drift-allowlist.txt",
"deploy-backend.sh"
]
},
"specs": {
"path": "specs",
"purpose": null,
"fileCount": 1,
"lastAccessed": 1776389561413,
"lastAccessed": 1778751573166,
"keyFiles": [
"README.md"
]
},
"supabase": {
"path": "supabase",
"purpose": null,
"fileCount": 2,
"lastAccessed": 1776389561413,
"fileCount": 4,
"lastAccessed": 1778751573185,
"keyFiles": [
"config.toml",
"seed.sql"
]
},
"supabase-assets": {
"path": "supabase-assets",
"purpose": null,
"fileCount": 1,
"lastAccessed": 1778751573192,
"keyFiles": [
"config.toml"
]
},
"tools": {
"path": "tools",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1778751573197,
"keyFiles": []
},
"docs/api": {
"path": "docs/api",
"purpose": "API routes",
"fileCount": 15,
"lastAccessed": 1776389561413,
"lastAccessed": 1778751573210,
"keyFiles": [
"README.md",
"SPEC-CHANGE-PROCESS.md",
Expand All @@ -174,11 +194,23 @@
"supabase/migrations": {
"path": "supabase/migrations",
"purpose": "Database migrations",
"fileCount": 2,
"lastAccessed": 1776389561414,
"fileCount": 19,
"lastAccessed": 1778751573230,
"keyFiles": [
"20260409075040_remote_schema.sql",
"20260409181000_add_item_image_dimensions.sql"
"20260417125959_view_logs_created_at_index.sql",
"20260417130000_admin_dashboard_rpcs.sql"
]
},
"supabase-assets/migrations": {
"path": "supabase-assets/migrations",
"purpose": "Database migrations",
"fileCount": 14,
"lastAccessed": 1778751573233,
"keyFiles": [
"20260424120000_initial.sql",
"20260426130000_drop_r2_columns.sql",
"20260427124408_drop_image_hash.sql"
]
}
},
Expand All @@ -189,12 +221,30 @@
"lastAccessed": 1776466352322,
"type": "file"
},
{
"path": "docs/superpowers/specs/2026-05-14-obsidian-vault-transition-design.md",
"accessCount": 18,
"lastAccessed": 1778752484618,
"type": "file"
},
{
"path": "docs/superpowers/specs/2026-04-17-229-image-proxy-robustness-design.md",
"accessCount": 11,
"lastAccessed": 1776433136836,
"type": "file"
},
{
"path": "docs/superpowers/specs/2026-05-14-telegram-bot-vault-integration-design.md",
"accessCount": 11,
"lastAccessed": 1778752464843,
"type": "file"
},
{
"path": "docs/superpowers/specs/2026-05-14-personal-vault-claude-volt-design.md",
"accessCount": 9,
"lastAccessed": 1778752475953,
"type": "file"
},
{
"path": "docs/superpowers/plans/2026-04-17-229-image-proxy-robustness.md",
"accessCount": 5,
Expand Down Expand Up @@ -254,6 +304,12 @@
"accessCount": 1,
"lastAccessed": 1776433000408,
"type": "directory"
},
{
"path": "docs/superpowers/specs/2026-04-23-305-source-type-structured-fields-phase-a-design.md",
"accessCount": 1,
"lastAccessed": 1778751258783,
"type": "file"
}
],
"userDirectives": []
Expand Down
10 changes: 10 additions & 0 deletions .planning/NEXT-GEN-MAGAZINE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!--
이 문서는 decoded-docs vault로 이관되었습니다 (2026-05-15).
최신 내용은 decoded-docs 에서 관리합니다.
-->

# 디코디드 — Next-Gen Magazine 컨셉 기획서

➡️ **이 문서는 [decoded-docs/Project/next-gen-magazine.md](https://github.com/decodedcorp/decoded-docs/blob/main/Project/next-gen-magazine.md) 로 이관되었습니다.**

decoded-docs 가 회사의 single source of truth 이고 매니저 agent도 vault 기준으로 답변합니다. 더 이상 이 파일을 편집하지 마세요.
10 changes: 10 additions & 0 deletions .planning/vertical-layers-strategy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!--
이 문서는 decoded-docs vault로 이관되었습니다 (2026-05-15).
최신 내용은 decoded-docs 에서 관리합니다.
-->

# Vertical Layers Strategy — Tagged 메커닉의 데이터 자산화

➡️ **이 문서는 [decoded-docs/Project/vertical-layers-strategy.md](https://github.com/decodedcorp/decoded-docs/blob/main/Project/vertical-layers-strategy.md) 로 이관되었습니다.**

decoded-docs 가 회사의 single source of truth 이고 매니저 agent도 vault 기준으로 답변합니다. 더 이상 이 파일을 편집하지 마세요.
11 changes: 11 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

짧은 **맵**입니다. 라우트/API/훅/디자인 시스템 **표·인벤토리**는 [`docs/agent/`](docs/agent/)에 두었습니다. 해당 작업을 할 때는 항상 해당 파일을 연 뒤 진행합니다.

## Documentation 위치 (decoded vs decoded-docs)

| 종류 | 위치 |
|------|------|
| 코드 · LLM 라우팅 · agent 인벤토리 · spec | **이 레포** (`docs/agent/`, `docs/superpowers/`, `CLAUDE.md`, 등) |
| 회의 · 결정 · 기획 · 아키텍처 · 회고 | **[decoded-docs vault](https://github.com/decodedcorp/decoded-docs)** (별도 레포) |

전체 sync policy: [decoded-docs/Guides/sync-policy.md](https://github.com/decodedcorp/decoded-docs/blob/main/Guides/sync-policy.md)

회사 지식 질의 (예: "지난주 결정 뭐였어?", "에디토리얼 매거진 방향성") 는 Telegram의 매니저 agent 에게 물어보면 vault 기반으로 답변합니다.

## Overview

Monorepo for the decoded platform — image/item discovery and curation with behavioral intelligence, editorial magazine system (news-referenced), virtual try-on (VTON), admin dashboard (seed pipeline, entity management, monitoring), SEO infrastructure, and design system (v2.0). AI-powered item detection (Ollama vision auto-tagging), social actions (like/save/comment/follow), personalization, rankings, collection/studio.
Expand Down
Loading
Loading