Bro / Activity log

Project threads

Discord requests and OpenCode responses, refreshed every 15 seconds.

6Projects
0Active
212Visible jobs

welplan

15 jobs

#63c27c5ccompletedLatest
Request
Allow CORS for GET APIs under /proxy as well.
Response
Changes: 2 file(s), +8/-2

Enabled CORS (`Access-Control-Allow-Origin: *`) for GET endpoints under `/proxy`, with tests ensuring non-GET proxy requests remain unaffected.

Verification passed:
- Focused CORS tests
- ESLint
- TypeScript build
- Webapp production build

Committed as `0c52f5c`.
Open in OpenCode
#991dde98completed
Request
Update the MCP get_restaurant_menu response to include the full course composition (rice, soup, and side-dish list) and nutrients for each item, matching the web detail page, in addition to each corner's representative menu and aggregate nutrition. Also allow the Access-Control-Allow-Origin header on all GET API endpoints except webhooks.
Response
Changes: 6 file(s), +92/-13

Implemented and committed as `1f52755`.

- MCP menus now include full itemized course composition and per-item nutrients while preserving representative menu and aggregate nutrition.
- Added `Access-Control-Allow-Origin: *` to all GET `/api` responses except webhooks.
- Added MCP and CORS tests.
- Verified 45 server tests, lint, and TypeScript build.
- Worktree is clean.
Open in OpenCode
#8e5c5be8completed
Request
현재 Welplan은 WebMCP만 제공해 MCP 관리 클라이언트에서 Streamable HTTP로 연결하면 POST 405가 발생한다. 누구나 인증 없이 접근 가능한 표준 MCP 서버를 구현하고 실제 서비스에 배포해라. 기존 공개 도메인 welplan.pmh.codes에 적절한 엔드포인트(권장 /mcp)를 추가하고 Streamable HTTP MCP 프로토콜의 initialize, tools/list, tools/call을 정상 지원해야 한다. 최소 도구는 식당 검색과 날짜별 식당 메뉴 조회로 구성하고, 기존 API/데이터 소스를 재사용해라. CORS와 필요한 MCP 세션/콘텐츠 타입 처리까지 호환되게 구현해라. 배포 후 외부에서 엔드포인트를 실제 호출해 검증하고, server-card/docs의 MCP 안내 및 엔드포인트도 표준 MCP 기준으로 갱신해라. 기존 WebMCP 및 웹/API 기능은 깨지지 않게 유지하고 테스트도 추가해라.
Response
Changes: 10 file(s), +442/-20
Open in OpenCode
#40e5c9f9completed
Request
현재 실패한 GitHub Actions 워크플로를 확인하고 원인을 진단해서 고쳐줘. 최근 실패한 실행 로그와 관련 워크플로/코드를 조사하고, 필요한 수정 후 가능한 테스트·검증을 수행해. 변경사항은 저장소에 반영하고 무엇이 문제였고 어떻게 검증했는지 결과에 요약해줘. 기존 기능이나 보안을 약화시키는 우회(검사 비활성화 등)는 하지 마.
Response
Changes: 1 file(s), +1/-0

Fixed and committed as `bfce539`.

- Cause: Docker CI failed on both architectures with `TS6307`; the worker TypeScript project omitted the newly imported `restaurant-combination.ts`.
- Fix: narrowly included that helper in `worker/tsconfig.json` without weakening checks.
- Verified: exact CI build chain, ESLint, TypeScript inclusion check, and native ARM64 Docker build all passed.
- Worktree is clean.
Open in OpenCode
#9ce8d6adfailed
Request
GSC CTR 개선 작업을 구현해. 현재 pmh.codes/welplan 프로젝트를 먼저 분석하고, 특히 restaurant 대표 URL과 날짜별 URL(예: /restaurants/.../{restaurant}/{YYYYMMDD})의 색인 캐니벌라이제이션을 안전하게 줄여줘. 과거 날짜 URL은 검색에 불필요하게 노출되지 않도록 noindex,follow 또는 적절한 canonical 전략을 적용하되, 오늘/미래 날짜 및 기존 기능/공유 URL UX를 깨지 말 것. 대표 식당 페이지의 SEO title/meta description을 `{식당명} 오늘 식단 | 삼성웰스토리 구내식당 메뉴 | 웰플랜` 의도에 맞춰 개선하고, SSR로 당일 메뉴와 날짜가 검색엔진에 명확히 노출되는지도 점검/보완해. 사이트 전체의 기존 provider/restaurant 타입에 안전하게 적용하고, 테스트/lint/build 실행 후 결과와 바뀐 파일, 배포 시 유의사항을 보고해. 추측으로 작업하지 말고 코드 구조와 프레임워크 메타데이터 규칙을 확인해서 구현해.
Response
OpenCode task timed out after 120 minutes
Open in OpenCode
#253ed6dfcompleted
Request
Perform an SEO-focused code audit of the Welplan codebase. Inspect routing, SSR/prerender behavior, metadata/title/description handling, canonical tags, sitemap/robots, structured data, internal linking, page discoverability for restaurant/date pages, performance/PWA factors that can impact crawling, and any issues that could hurt Google/Naver search visibility. Return a concise but specific report with file paths, concrete problems, prioritized recommendations, and suggested implementation steps. Do not modify files.
Response
Changes: no file changes reported

**SEO Audit Summary**
Discovery was stopped as requested; findings are limited to the inspected repository surface.

**P0: Indexability**
- `docker/image-indexing.mjs` and `docker/entrypoint.mjs`: Image-indexing controls can unintentionally suppress valuable restaurant/menu images. Ensure only generated or low-value images receive `X-Robots-Tag: noimageindex`, not entire HTML responses.
- `worker/src/indexnow.ts`: IndexNow improves Bing/Naver discovery but does not replace Google sitemap discovery. Submit only canonical, publicly indexable URLs and remove expired date URLs when menus disappear.

**P1: Routing And Discovery**
- `webapp/package.json`: Confirm the web application emits server-rendered or prerendered HTML for every public restaurant/date URL. Initial HTML must contain the restaurant name, date, menu text, title, description, canonical URL, and internal links without requiring client JavaScript.
- Restaurant/date pages should use stable crawlable URLs, return real `404`/`410` responses when invalid, and avoid indexable query-string duplicates.
- Add ordinary `<a href>` links from restaurant indexes to detail pages and between adjacent dates. Avoid discovery paths available only through dialogs, client-sid
... truncated
Open in OpenCode
#79bc4231completed
Request
Ensure all image assets on the welplan site are always excluded from search indexing. Implement a robust solution at the application/server level so every image response (e.g. /img/** and any other static image paths/extensions like png/jpg/jpeg/gif/webp/svg/avif) returns appropriate anti-indexing directives for crawlers, preferably via X-Robots-Tag headers such as noindex, noimageindex, nosnippet (and any equivalent framework/server config needed). Do not rely only on robots.txt. Also add or update robots.txt rules to disallow image directories where appropriate, but keep the header-based protection as the primary control. Review current routing/static file serving to make sure direct image URLs like /img/welstory/data/manager/recipe/E70Z/20260713/s20260708113336.png are covered. Make the change in code/config, run relevant checks/tests if available, and summarize exactly what was changed plus any deployment/reload steps required. Important context: Naver is indexing image URLs right now, so prioritize preventing future indexing of all images across the project.
Response
Changes: 8 file(s), +113/-3

Implemented and committed as `4095eab`.

- Added server-level `X-Robots-Tag: noindex, noimageindex, nosnippet` for `/img/**`, image extensions, and all `image/*` responses.
- Covered adapter-node static assets and SvelteKit application responses.
- Updated `robots.txt` with `/img/` and image-extension disallows.
- Verified the exact Welstory URL pattern and root static images receive the header.
- Passed unit tests, ESLint, TypeScript compilation, and production build.
- Deployment requires rebuilding and restarting the Docker container; no configuration or port changes.
Open in OpenCode
#ad6f7ec7completed
Request
Change how images are displayed as follows:

- Meal plans less than 20 days old: display the image stored in the DB first, then switch to an image proxied from upstream.
- Meal plans 20 days old or older: display the image directly from upstream without a proxy, and delete it from the DB.
- Periodically delete images for already-expired meal plans from the DB as well. Old images are currently still stored and consuming storage space.
Response
Changes: 7 file(s), +66/-13

Implemented and committed as `0f44db8`.

- Images remain DB-first through the proxy for plans under 20 days old.
- Plans 20+ days old use upstream URLs directly.
- Persisted images now track meal-plan dates.
- Expired images are removed immediately on stale proxy access and during daily cleanup.
- Legacy cached images remain cleanup-compatible.
- Added exact 20-day boundary tests.

Verification passed: TypeScript build, production webapp build, ESLint, tests, and diff checks.
Open in OpenCode
#1ccf573dcompleted
Request
Investigate why today's menu image display uses the Welstory endpoint directly instead of the image stored in the database.
Response
Changes: 2 file(s), +3/-4

Investigated and fixed two causes:

- HTTPS Welstory URLs now correctly map to the local image proxy.
- Live-refresh query parameters no longer bypass persisted image caches and force an upstream Welstory fetch.

Verification passed:

- `pnpm lint`
- `pnpm build`
- Webapp production build
- Clean worktree

Committed as `23dc297 fix(webapp): serve cached Welstory images`.
Open in OpenCode
#0b18ac26completed
Request
Investigate the issue that is still occurring in production using kubectl and the production endpoint https://welplan.pmh.codes/.
Response
Changes: 2 file(s), +23/-4

Investigated and resolved the production issue:

- Root cause: corrupted PostgreSQL optimizer statistics for `restaurants`, causing `XX001` TOAST errors.
- Repaired statistics without deleting application data.
- Production gallery recovered from 0 to 27 items; search and live-menu endpoints work.
- Added a database readability probe so `/api/health` returns `503` on recurrence.
- Passed TypeScript build, ESLint, webapp production build, and production verification.
- Committed as `2498f52`.
Open in OpenCode
#b8e6fcdbcompleted
Request
Investigate why the menu is not showing, using kubectl and the production endpoint https://welplan.pmh.codes/.
Response
Changes: 1 file(s), +3/-0

Root cause identified and fixed:

- Production logs showed `TypeError: http2.connect is not a function`, breaking all Welstory authentication and menu fetches.
- Externalized the Welstory package from SvelteKit SSR bundling to preserve Undici’s native Node HTTP/2 loading.
- Verified TypeScript build, production webapp build, ESLint, package resolution, and clean bundle output.
- Committed as `87636ef` with the required trailer.
- Worktree is clean.
Open in OpenCode
#106c7d47completed
Request
Fix the failed GitHub Actions workflow from the previous job.
Response
Changes: 1 file(s), +1/-0

Fixed the GitHub Actions Docker build failure by adding `image-retention.ts` to `worker/tsconfig.json`.

Verified:
- Exact CI compile and webapp build command
- ESLint
- Full Docker image build
- Clean worktree

Committed as `b8514c4 fix(worker): include image retention module`.
Open in OpenCode
#f3b4992dcompleted
Request
In the welplan project, periodically delete all photos older than two weeks from the database. When fetching photos older than two weeks, do not save them to the database; just forward them.
Response
Changes: 10 file(s), +102/-37

Implemented and committed as `460742b`.

- Deletes PostgreSQL photos cached over 14 days, daily.
- Invalidates corresponding memory and Redis image caches.
- Forwards photos older than 14 days without caching or database persistence.
- Propagates menu dates through all image proxy paths.
- Uses Korea-local calendar dates for retention boundaries.
- Verified with `pnpm build`, `pnpm lint`, webapp production build, and boundary checks.
Open in OpenCode
#976f22b4completed
Request
Support R8 configuration: Full Mode, Resource Shrinking, Optimized Resource Shrinking, and Repackage Classes. Upgrade to AGP version 9.0 and use R8 to achieve the best performance.
Response
Changes: 8 file(s), +26/-18

Implemented and committed as `f103919` (`build(pwabuild): upgrade to AGP 9`).

- Upgraded to AGP 9.0.1 and Gradle 9.1.0.
- Enabled R8 full mode, optimized resource shrinking, release resource shrinking, and class repackaging.
- Added optimized ProGuard configuration.
- Verified tests, lint, release build, R8 mappings, resource removal, and APK integrity.
- Worktree is clean and commit includes the required trailer.
Open in OpenCode
#afc62601completed
Request
Update pwabuild to target Android 16 (API level 36) or higher.
Response
Changes: 1 file(s), +1/-1

Updated `pwabuild/app/build.gradle` to target Android 16 / API 36.

- Release APK and AAB builds passed.
- Packaged manifests confirm `targetSdkVersion="36"`.
- Committed as `5a66a93` with the required trailer.
- Worktree is clean.
Open in OpenCode