Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 7 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
- 목표는 작업이 중간에 끊겨도 다음 세션에서 바로 이어갈 수 있게 만드는 것이다.

## 필수 규칙
1. 작업을 시작하기 전에 `PLAN.md` `PROGRESS.md`를 먼저 확인한다.
1. 작업을 시작하기 전에 `PLAN.md`, `PROGRESS.md`, `docs/product/prd.md`, `docs/product/trd.md`를 먼저 확인한다.
2. 구현 우선순위나 범위가 바뀌면 코드보다 먼저 `PLAN.md`를 갱신한다.
3. 의미 있는 구현, 수정, 검증이 끝나면 `PROGRESS.md`를 즉시 갱신한다.
4. 세션을 마칠 때는 다음 사람이 바로 이어서 작업할 수 있을 정도로 현재 상태를 남긴다.
Expand All @@ -23,6 +23,12 @@
- 지금까지 무엇을 했는지
- 어디까지 검증했는지
- 다음에 무엇부터 하면 되는지
- `docs/product/prd.md`
- 제품 목표와 사용자 가치
- MVP 범위와 우선 기능
- `docs/product/trd.md`
- 기술 설계와 배포/운영 제약
- 구현 시 지켜야 할 기술 기준

## 작업 원칙
- 구현과 문서화는 분리하지 않는다.
Expand Down
23 changes: 12 additions & 11 deletions PLAN.md

Large diffs are not rendered by default.

76 changes: 51 additions & 25 deletions PROGRESS.md

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@

- Demo: [altteulmap.altteul-lab.workers.dev](https://altteulmap.altteul-lab.workers.dev)
- Admin: [altteulmap-admin.altteul-lab.workers.dev](https://altteulmap-admin.altteul-lab.workers.dev)
- Docs: [Cloudflare deploy guide](docs/deploy-cloudflare.md)
- Docs: [Cloudflare deploy guide](docs/deploy/deploy-cloudflare.md)

최근 유행했던 `거지맵` 서비스에서 아이디어를 얻었습니다. 다만 음식점에만 머무르지 않고, 생활 서비스까지 포함한 더 넓은 절약 지도 형태로 확장하고 싶었습니다. 여기에 공공데이터를 적극적으로 활용해 실제 운영 가능한 데이터 기반 서비스를 만들고 싶었고, 고물가와 취업난이 겹친 지금의 시대감에도 잘 맞는 주제라고 판단해 개발했습니다.

![Altteulmap home](docs/readme/hero-home.png)

Expand Down
13 changes: 13 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Docs

## Product
- [PRD](product/prd.md)
- [TRD](product/trd.md)

## Deployment
- [Cloudflare deploy guide](deploy/deploy-cloudflare.md)
- [Cloudflare account to deploy](deploy/cloudflare-account-to-deploy.md)

## Project Workflow
- [PLAN](../PLAN.md)
- [PROGRESS](../PROGRESS.md)
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ npm run db:seed
```

이 저장소의 배포 체크 문서는 별도로 아래 파일에 있다.
- `/Users/alex/project/altteulmap/docs/deploy-cloudflare.md`
- `deploy-cloudflare.md`

## 9. 첫 `workers.dev` 배포

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
- Cloudflare Workers + OpenNext 기준으로 알뜰맵을 배포할 때 빠뜨리기 쉬운 설정을 한 문서에 모은다.
- 실제 배포 전 `npm run deploy:check`로 환경 변수를 먼저 점검한다.
- 계정 생성부터 첫 배포까지의 전체 절차는 아래 문서를 함께 본다.
- `/Users/alex/project/altteulmap/docs/cloudflare-account-to-deploy.md`
- `cloudflare-account-to-deploy.md`

## 1. 배포 전 필수 확인
1. `npm run verify`
Expand Down
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"deploy:check:admin": "node scripts/check-cloudflare-deploy.mjs --admin",
"hooks:install": "node scripts/git-hooks/install-hooks.mjs",
"cf:clean": "rm -rf .next .open-next",
"clean:artifacts": "rm -rf .next .next-dev .open-next apps/admin/.next apps/admin/.next-dev apps/admin/.open-next test-results playwright-report tsconfig.tsbuildinfo apps/admin/tsconfig.tsbuildinfo",
"cf:patch-next-runtime": "node scripts/patch-next-cloudflare-runtime.mjs",
"cf:build": "npm run admin:sync && npm run cf:patch-next-runtime && npm run cf:clean && opennextjs-cloudflare build",
"cf:build:public": "npm run cf:clean && node scripts/build-public-worker.mjs",
Expand Down
15 changes: 11 additions & 4 deletions src/features/places/map-explorer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,7 @@ export function MapExplorer({
const [isMobileListOpen, setIsMobileListOpen] = useState(false);
const [mobileListSheetMode, setMobileListSheetMode] =
useState<MobileSheetMode>("peek");
const lastMobileListCloseAtRef = useRef(0);
const [manualRefreshTick, setManualRefreshTick] = useState(0);
const shouldSkipInitialFetchRef = useRef(prefetchedOnServer);
const activeBounds =
Expand Down Expand Up @@ -471,6 +472,7 @@ export function MapExplorer({
}
: null;
const closeMobileList = () => {
lastMobileListCloseAtRef.current = Date.now();
setIsMobileListOpen(false);
setMobileListSheetMode("peek");
};
Expand All @@ -480,6 +482,14 @@ export function MapExplorer({
const collapseMobileList = () => {
setMobileListSheetMode("peek");
};
const openMobileList = () => {
if (Date.now() - lastMobileListCloseAtRef.current < 250) {
return;
}

setMobileListSheetMode("peek");
setIsMobileListOpen(true);
};
const mobileListSheetGesture = useMobileSheetGesture({
enabled: isMobileListOpen,
mode: mobileListSheetMode,
Expand Down Expand Up @@ -631,10 +641,7 @@ export function MapExplorer({
<div className="pointer-events-auto flex items-center gap-2 rounded-2xl border border-stone-200 bg-white/95 p-2 shadow-lg backdrop-blur">
<button
type="button"
onClick={() => {
setMobileListSheetMode("peek");
setIsMobileListOpen(true);
}}
onClick={openMobileList}
data-testid="mobile-place-list-open"
className="altteulmap-accent-solid altteulmap-button whitespace-nowrap px-4 py-2 text-sm font-medium"
>
Expand Down
Loading