처음에 그냥 단일 폴더에서 시작할까 했는데, 백엔드가 Python(FastAPI)이고 프론트가 Electron + Vue라서 아무리 봐도 모노레포가 맞았다. pnpm workspace 써보고 싶기도 했고.
구조 잡기
apps/core에 FastAPI, apps/desktop에 Electron + Vue를 넣고, 공유 타입은 packages/contracts에 몰아넣는 식으로 갔다. 처음 세팅할 때 pnpm-workspace.yaml 작성이 좀 헷갈렸는데 한번 잡고 나니까 각 앱이 독립적으로 빌드되는 게 확실히 편하다.
WSL2에서 Electron이 안 뜸
이게 좀 짜증났는데, pnpm 10이랑 Electron 조합이 WSL2에서 바로 실행이 안 됐다. electron이 postinstall에서 바이너리를 받는데 호이스팅 문제로 경로를 못 찾는 거였다. .npmrc에서 호이스팅 설정을 만져서 해결했는데, 이거 찾는 데만 몇 시간 걸린 듯.
UI는 Obsidian 참고
다크 테마 + 사이드바 파일 탐색기 구조를 Obsidian에서 많이 참고했다. 폰트는 Outfit이랑 JetBrains Mono를 넣었고, CSS 변수로 컬러 토큰을 잡아뒀다. 나중에 테마 전환 넣으려면 이때 잘 잡아놔야 해서.
솔직히 이 단계에서 뭔가 동작하는 게 없으니까 좀 지루했다. 근데 이 뼈대가 이후에 진짜 큰 차이를 만들었다.