Skip to content

Commit 78f78e6

Browse files
SOIVclaude
andcommitted
fix(tunnel): Named Tunnel 타임아웃 버그 수정 및 README 현행화
- Named Tunnel은 url 이벤트를 발생시키지 않아 60초 타임아웃 발생하던 문제 수정 - Named 모드에서 2초 대기 후 프로세스 생존 확인으로 성공 처리 - AdminView에서 named 터널 URL을 의미 있는 안내 문구로 표시 - README(ko/en)를 로드맵 문서 기준으로 현행화 (Phase 2.2 진행 중) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 955b356 commit 78f78e6

4 files changed

Lines changed: 194 additions & 155 deletions

File tree

README.md

Lines changed: 134 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,134 @@
1-
# Fieldstack
2-
3-
> Personal modular productivity framework
4-
5-
[![한국어](https://img.shields.io/badge/README-한국어-blue)](README_ko.md)
6-
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7-
[![GitHub Org](https://img.shields.io/badge/GitHub-fieldstack--project-181717?logo=github)](https://github.com/fieldstack-project)
8-
9-
---
10-
11-
## About
12-
13-
Fieldstack is an open-source, self-hosted modular framework for personal productivity and finance management.
14-
15-
**Developed and maintained by** [PSquare DIVISION](https://github.com/psquare-division)
16-
17-
### Core Values
18-
-**Completely Free** - No feature restrictions
19-
-**Self-hosted** - Your data, your control
20-
-**Modular** - Install only what you need
21-
-**Open Source** - MIT License
22-
-**Community-driven** - Built together
23-
24-
---
25-
26-
## Development Status
27-
28-
Current phase: **Development in progress (Roadmap Phase 1.5)**
29-
30-
- ✅ Planning and documentation are complete
31-
- ✅ Roadmap Phase 1 (Core foundation) is complete
32-
- ✅ Roadmap Phase 1.9 (API server, DB, auth backend, shared links) is complete
33-
- 🚧 Roadmap Phase 1.5 (Core Control Plane UI/UX) is nearing completion
34-
- 🎯 Target timeline remains **2026-2027**
35-
36-
### Phase Progress
37-
38-
| Phase | Scope (Roadmap) | Status | Progress |
39-
| ------- | ----------- | ------- | ------- |
40-
| Phase 1 | Core foundation setup | Completed ✅ | 100% |
41-
| Phase 1.5 | Core Control Plane UI/UX | In progress ⏳ | 90% |
42-
| Phase 1.9 | API server · DB · auth backend · shared links | Completed ✅ | 100% |
43-
| Phase 1.95 | Setup install wizard (mode switch · backend API · UI) | In progress ⏳ | 0% |
44-
| Phase 2 | Core module development (Ledger, Subscription) | Not started 🚧 | 0% |
45-
| Phase 3 | Marketplace and website | Not started 🚧 | 0% |
46-
| Phase 4 | Deployment optimization | Not started 🚧 | 0% |
47-
| Phase 5 | Expansion and ecosystem | Not started 🚧 | 0% |
48-
| Phase 6 | Community growth (continuous) | Not started 🚧 | 0% |
49-
50-
#### Phase 1.5 Snapshot (2026-04-15)
51-
52-
| Sub-phase | Scope | Status |
53-
| --------- | ----- | ------ |
54-
| 1.5.1 | Control UI components (P0/P0.5 implemented, `ready: true`) | Done ✅ |
55-
| 1.5.2 | Install wizard dev bypass (`dev:bypass`) | Done ✅ |
56-
| 1.5.3 | Login UX (failure/lock/session expiry, password recovery, mock accounts) | Done ✅ |
57-
| 1.5.4 | Main Home (sidebar, deep link routing, mobile drawer, onboarding banner) | Done ✅ |
58-
| 1.5.5 | Admin dashboard / general settings (PIN step-up, audit log, dirty-state save) | Done ✅ |
59-
| 1.5.6 | UX quality baseline (responsive breakpoints, QA checklist, a11y, tone guide) | Done ✅ |
60-
| Gate | Accessibility / responsive / E2E pass · UI contract freeze | Pending ⏳ |
61-
62-
> Note: This phase table follows `docs/v2_FINANCIAL-LEDGER/roadmap/01-development-plan.md` and is updated as implementation progresses.
63-
64-
---
65-
66-
## Tech Stack
67-
68-
| Layer | Technology |
69-
| ----- | ---------- |
70-
| Frontend | React 19, Vite, TypeScript (strict) |
71-
| Backend | Node.js, Express 5, tsx |
72-
| Database | PostgreSQL (primary) · SQLite (planned) |
73-
| Auth | JWT, TOTP 2FA, Argon2id |
74-
| Monorepo | pnpm workspaces |
75-
| Testing | Vitest |
76-
| UI Components | `@fieldstack/controls` (internal), Storybook |
77-
| Styling | CSS custom properties (design token system) |
78-
79-
---
80-
81-
## Getting Started
82-
83-
> **Production deployment guide will be published when the Setup install wizard (Phase 1.95) is complete.**<br>
84-
> Until then, you can run the project locally in development mode.
85-
86-
### Local Development
87-
88-
```bash
89-
git clone https://github.com/fieldstack-project/fieldstack.git
90-
cd fieldstack
91-
pnpm install
92-
93-
# Start PostgreSQL (Docker required)
94-
docker-compose up -d
95-
96-
# Run dev server (web + api in parallel)
97-
pnpm dev:bypass # skip install wizard
98-
# → Web: http://localhost:5173
99-
# → API: http://localhost:3000
100-
101-
# Storybook (UI components)
102-
pnpm storybook # http://localhost:6007
103-
```
104-
105-
**Dev mock accounts**
106-
107-
| Role | Email | Password |
108-
| ---- | ----- | -------- |
109-
| Admin | `admin@fieldstack.dev` | `Admin1234!` |
110-
| User | `user@fieldstack.dev` | `User1234!` |
111-
112-
---
113-
114-
## Documentation
115-
116-
📚 [Official Documentation](https://docs.fieldstack.dev)<br>
117-
🏪 [Marketplace](https://marketplace.fieldstack.dev)<br>
118-
💬 [Community Discord](https://discord.gg/5m4aHKmWgg)
119-
120-
---
121-
122-
## License
123-
124-
MIT License - see [LICENSE](LICENSE) for details
125-
126-
**Copyright © 2026 Fieldstack Project Contributors**<br>
127-
**Developed and maintained by PSquare DIVISION**
1+
# Fieldstack
2+
3+
> Personal modular productivity framework
4+
5+
[![한국어](https://img.shields.io/badge/README-한국어-blue)](README_ko.md)
6+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7+
[![GitHub Org](https://img.shields.io/badge/GitHub-fieldstack--project-181717?logo=github)](https://github.com/fieldstack-project)
8+
9+
---
10+
11+
## About
12+
13+
Fieldstack is an open-source, self-hosted modular framework for personal productivity and finance management.
14+
15+
**Developed and maintained by** [PSquare DIVISION](https://github.com/psquare-division)
16+
17+
### Core Values
18+
-**Completely Free** - No feature restrictions
19+
-**Self-hosted** - Your data, your control
20+
-**Modular** - Install only what you need
21+
-**Open Source** - MIT License
22+
-**Community-driven** - Built together
23+
24+
---
25+
26+
## Development Status
27+
28+
Current phase: **Phase 2.2 — Subscription module in progress**
29+
30+
- Phase 1 · 1.5 · 1.9 · 1.95 — all complete
31+
- Phase 2 pre-work (ModuleRegistry, module management API, per-user activation) — complete
32+
- Phase 2.1 Ledger (backend + frontend, CSV import/export, budgets, receipt attachments) — complete
33+
- Phase 2.x core infrastructure (i18n, Event Bus, Core Scheduler, exchange rates) — mostly complete
34+
- Phase 2.2 Subscription — core features complete, remaining: Google Calendar, calendar view, timezone strategy
35+
- Target timeline: **2026–2027**
36+
37+
### Phase Progress
38+
39+
| Phase | Scope | Status | Progress |
40+
| ----- | ----- | ------ | -------- |
41+
| Phase 1 | Core foundation setup | Completed ✅ | 100% |
42+
| Phase 1.5 | Core Control Plane UI/UX | Completed ✅ | 100% |
43+
| Phase 1.9 | API server · DB · auth backend · shared links | Completed ✅ | 100% |
44+
| Phase 1.95 | Setup install wizard (mode switch · backend API · UI · reset) | Completed ✅ | 100% |
45+
| Phase 2 Pre | ModuleRegistry · module management API · per-user activation | Completed ✅ | 100% |
46+
| Phase 2.1 | Ledger module (backend + frontend) | Completed ✅ | 100% |
47+
| Phase 2.x | Core systems (i18n · Event Bus · Scheduler · exchange rates) | Mostly complete ⏳ | ~80% |
48+
| Phase 2.2 | Subscription module | In progress ⏳ | ~70% |
49+
| Phase 3 | Marketplace and website | Not started 🚧 | 0% |
50+
| Phase 4 | Deployment optimization | Not started 🚧 | 0% |
51+
| Phase 5 | Expansion and ecosystem | Not started 🚧 | 0% |
52+
| Phase 6 | Community growth (continuous) | Not started 🚧 | 0% |
53+
54+
#### Phase 2.2 Subscription — Remaining
55+
56+
| Item | Status |
57+
| ---- | ------ |
58+
| Core features (CRUD · price history · stats · notes · scheduler · Event Bus) | Done ✅ |
59+
| Cumulative stats with status history (pause/resume periods excluded) | Done ✅ |
60+
| Payment calendar view | Pending ⏳ |
61+
| Ledger auto-sync (`subscription:payment` event receiver) | Pending ⏳ |
62+
| Timezone strategy (display vs. billing calculation separation) | Pending ⏳ |
63+
| Google Calendar integration | Pending ⏳ |
64+
65+
> Note: This table follows `docs/v2_FINANCIAL-LEDGER/roadmap/01-development-plan.md` and is updated as implementation progresses.
66+
67+
---
68+
69+
## Tech Stack
70+
71+
| Layer | Technology |
72+
| ----- | ---------- |
73+
| Frontend | React 19, Vite, TypeScript (strict) |
74+
| Backend | Node.js, Express 5, tsx |
75+
| Database | PostgreSQL (primary) · SQLite via `better-sqlite3` |
76+
| Auth | JWT, TOTP 2FA, Argon2id |
77+
| i18n | i18next · react-i18next (ko / en) |
78+
| Scheduler | node-cron (Core Scheduler with DB logging) |
79+
| Exchange rates | Frankfurter API (DB-cached) |
80+
| Monorepo | pnpm workspaces |
81+
| Testing | Vitest |
82+
| UI Components | `@fieldstack/controls` (internal), Storybook |
83+
| Styling | CSS custom properties (design token system) |
84+
| Tunneling | Cloudflare Tunnel (Quick / Named) |
85+
86+
---
87+
88+
## Getting Started
89+
90+
> **Production deployment guide will be published when Phase 2 is complete.**<br>
91+
> Until then, you can run the project locally in development mode.
92+
93+
### Local Development
94+
95+
```bash
96+
git clone https://github.com/fieldstack-project/fieldstack.git
97+
cd fieldstack
98+
pnpm install
99+
100+
# Start PostgreSQL (Docker required)
101+
docker-compose up -d
102+
103+
# Run dev server (web + api in parallel)
104+
pnpm dev:bypass # skip install wizard
105+
# → Web: http://localhost:5173
106+
# → API: http://localhost:3000
107+
108+
# Storybook (UI components)
109+
pnpm storybook # http://localhost:6007
110+
```
111+
112+
**Dev mock accounts**
113+
114+
| Role | Email | Password |
115+
| ---- | ----- | -------- |
116+
| Admin | `admin@fieldstack.dev` | `Admin1234!` |
117+
| User | `user@fieldstack.dev` | `User1234!` |
118+
119+
---
120+
121+
## Documentation
122+
123+
📚 [Official Documentation](https://docs.fieldstack.dev)<br>
124+
🏪 [Marketplace](https://marketplace.fieldstack.dev)<br>
125+
💬 [Community Discord](https://discord.gg/5m4aHKmWgg)
126+
127+
---
128+
129+
## License
130+
131+
MIT License - see [LICENSE](LICENSE) for details
132+
133+
**Copyright © 2026 Fieldstack Project Contributors**<br>
134+
**Developed and maintained by PSquare DIVISION**

README_ko.md

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,42 @@ Fieldstack은 개인 생산성과 재무 관리를 위한 오픈소스 기반의
2525

2626
## 개발 현황
2727

28-
현재 단계: **개발 진행 중 (로드맵 Phase 1.5)**
28+
현재 단계: **Phase 2.2 — Subscription 모듈 진행 중**
2929

30-
- ✅ 기획 및 문서화 단계 완료
31-
- ✅ 로드맵 Phase 1(Core 기반 구축) 완료
32-
- ✅ 로드맵 Phase 1.9(API 서버 · DB · 인증 백엔드 · 공유 링크) 완료
33-
- 🚧 로드맵 Phase 1.5(Core Control Plane UI/UX) 마무리 단계
34-
- 🎯 전체 목표 타임라인은 **2026-2027** 유지
30+
- Phase 1 · 1.5 · 1.9 · 1.95 — 전 항목 완료
31+
- Phase 2 사전 작업 (ModuleRegistry · 모듈 관리 API · 유저별 활성화) — 완료
32+
- Phase 2.1 Ledger (백엔드 + 프론트, CSV import/export, 예산, 영수증 첨부) — 완료
33+
- Phase 2.x 코어 인프라 (i18n · Event Bus · Core Scheduler · 환율 시스템) — 대부분 완료
34+
- Phase 2.2 Subscription — 핵심 기능 완료, 잔여: Google Calendar · 캘린더 뷰 · 시간대 전략
35+
- 전체 목표 타임라인: **2026–2027**
3536

3637
### Phase 진행 현황
3738

3839
| 단계(Phase) | 범위(로드맵) | 상태 | 진행률 |
39-
| ----------- | ----------- | --- | ----- |
40+
| ----------- | ----------- | ---- | ----- |
4041
| Phase 1 | Core 기반 구축 | 완료 ✅ | 100% |
41-
| Phase 1.5 | Core Control Plane UI/UX | 진행 중 ⏳ | 90% |
42+
| Phase 1.5 | Core Control Plane UI/UX | 완료 ✅ | 100% |
4243
| Phase 1.9 | API 서버 · DB · 인증 백엔드 · 공유 링크 | 완료 ✅ | 100% |
43-
| Phase 1.95 | Setup 설치 마법사 (모드 전환 · 백엔드 API · UI) | 진행 중 ⏳ | 0% |
44-
| Phase 2 | 기본 모듈 개발(Ledger, Subscription) | 시작 전 🚧 | 0% |
44+
| Phase 1.95 | Setup 설치 마법사 (모드 전환 · 백엔드 API · UI · 초기화) | 완료 ✅ | 100% |
45+
| Phase 2 Pre | ModuleRegistry · 모듈 관리 API · 유저별 활성화 | 완료 ✅ | 100% |
46+
| Phase 2.1 | Ledger 모듈 (백엔드 + 프론트엔드) | 완료 ✅ | 100% |
47+
| Phase 2.x | 코어 시스템 보완 (i18n · Event Bus · Scheduler · 환율) | 대부분 완료 ⏳ | ~80% |
48+
| Phase 2.2 | Subscription 모듈 | 진행 중 ⏳ | ~70% |
4549
| Phase 3 | 마켓플레이스 및 웹사이트 | 시작 전 🚧 | 0% |
4650
| Phase 4 | 배포 최적화 | 시작 전 🚧 | 0% |
4751
| Phase 5 | 확장 및 생태계 | 시작 전 🚧 | 0% |
4852
| Phase 6 | 커뮤니티 성장(지속) | 시작 전 🚧 | 0% |
4953

50-
#### Phase 1.5 스냅샷 (2026-04-15)
54+
#### Phase 2.2 Subscription — 잔여 항목
5155

52-
| 서브 페이즈 | 범위 | 상태 |
53-
| ----------- | ---- | ---- |
54-
| 1.5.1 | Control UI 컴포넌트 (P0/P0.5 구현 완료, `ready: true`) | 완료 ✅ |
55-
| 1.5.2 | 설치 마법사 개발용 bypass (`dev:bypass`) | 완료 ✅ |
56-
| 1.5.3 | 로그인 UX (실패/잠금/세션 만료, 비밀번호 복구, mock 계정 시스템) | 완료 ✅ |
57-
| 1.5.4 | 메인 홈 (사이드바, 딥 링크, 모바일 Drawer, 온보딩 배너) | 완료 ✅ |
58-
| 1.5.5 | 관리자 대시보드 / 일반 설정 (PIN step-up, 감사 로그, dirty-state 저장) | 완료 ✅ |
59-
| 1.5.6 | UX 품질 기준 (반응형 브레이크포인트, QA 체크리스트, 접근성, 톤 가이드) | 완료 ✅ |
60-
| 게이트 | 접근성/반응형/E2E 통과 · UI 계약 동결 | 진행 중 ⏳ |
56+
| 항목 | 상태 |
57+
| ---- | ---- |
58+
| 핵심 기능 (CRUD · 가격 히스토리 · 통계 · 메모 · Scheduler · Event Bus) | 완료 ✅ |
59+
| 구독 상태 이력 기반 누적 통계 (해지 기간 제외 계산) | 완료 ✅ |
60+
| 결제일 캘린더 뷰 | 예정 ⏳ |
61+
| Ledger 자동 연동 (`subscription:payment` 이벤트 수신) | 예정 ⏳ |
62+
| 시간대 전략 (표시 시간대 / 결제 계산 시간대 분리) | 예정 ⏳ |
63+
| Google Calendar 연동 | 예정 ⏳ |
6164

6265
> 참고: 본 Phase 표는 `docs/v2_FINANCIAL-LEDGER/roadmap/01-development-plan.md` 기준이며, 구현 진행에 따라 갱신됩니다.
6366
@@ -69,18 +72,22 @@ Fieldstack은 개인 생산성과 재무 관리를 위한 오픈소스 기반의
6972
| ------ | ---- |
7073
| 프론트엔드 | React 19, Vite, TypeScript (strict) |
7174
| 백엔드 | Node.js, Express 5, tsx |
72-
| 데이터베이스 | PostgreSQL (1순위) · SQLite (예정) |
75+
| 데이터베이스 | PostgreSQL (1순위) · SQLite (`better-sqlite3`) |
7376
| 인증 | JWT, TOTP 2FA, Argon2id |
77+
| 국제화 | i18next · react-i18next (ko / en) |
78+
| 스케줄러 | node-cron (DB 로그 포함 Core Scheduler) |
79+
| 환율 | Frankfurter API (DB 캐시) |
7480
| 모노레포 | pnpm workspaces |
7581
| 테스트 | Vitest |
7682
| UI 컴포넌트 | `@fieldstack/controls` (내부 패키지), Storybook |
7783
| 스타일링 | CSS 커스텀 프로퍼티 (디자인 토큰 시스템) |
84+
| 터널링 | Cloudflare Tunnel (Quick / Named) |
7885

7986
---
8087

8188
## 시작하기
8289

83-
> **프로덕션 배포 가이드는 Setup 설치 마법사(Phase 1.95) 완료 시점에 공개됩니다.**<br>
90+
> **프로덕션 배포 가이드는 Phase 2 완료 시점에 공개됩니다.**<br>
8491
> 그 전까지는 아래 방법으로 로컬 개발 환경에서 실행할 수 있습니다.
8592
8693
### 로컬 개발 환경

apps/api/src/tunnel/cloudflare-tunnel.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,23 @@ class CloudflareTunnelManager {
109109
});
110110

111111
const url = await new Promise<string>((resolve, reject) => {
112+
// Named Tunnel은 url 이벤트를 발생시키지 않으므로 즉시 반환
113+
if (cfg.mode === 'named') {
114+
tunnelInstance.once('error', (err: Error) => {
115+
log.error('tunnel', `tunnel error: ${err.message}`);
116+
reject(err);
117+
});
118+
tunnelInstance.once('exit', (code: number | null) => {
119+
reject(new Error(`cloudflared 프로세스가 예상치 못하게 종료되었습니다 (code: ${code}).`));
120+
});
121+
// 잠시 대기 후 프로세스가 살아있으면 성공으로 간주
122+
setTimeout(() => {
123+
log.success('tunnel', 'named tunnel active (URL is configured in Cloudflare dashboard)');
124+
resolve('named');
125+
}, 2_000);
126+
return;
127+
}
128+
112129
const timeout = setTimeout(() => {
113130
reject(new Error('터널 URL을 가져오는 데 시간이 초과되었습니다 (60초).'));
114131
}, 60_000);

0 commit comments

Comments
 (0)