Skip to content

Port pointup modernization into point_bot (+ AWS Bedrock Claude assistant) - #1

Merged
jckail merged 2 commits into
masterfrom
cursor/port-pointup-modernization-0b0a
Jul 9, 2026
Merged

Port pointup modernization into point_bot (+ AWS Bedrock Claude assistant)#1
jckail merged 2 commits into
masterfrom
cursor/port-pointup-modernization-0b0a

Conversation

@jckail

@jckail jckail commented Jul 9, 2026

Copy link
Copy Markdown
Owner

Summary

point_bot and jckail/pointup are the same loyalty-points product in two stacks. point_bot was a discontinued Python/Selenium scraper; pointup (branch cursor/modernize-ts-drizzle-aws-0b0a, PR #1) is the full TypeScript/Drizzle/AWS modernization. This PR lands that modernization in its intended home and finishes the one piece pointup left open: the AWS Bedrock (Claude Sonnet) assistant.

Full write-up: docs/migration-from-pointup.md.

Decisions (confirmed with the repo owner)

  • Branding: keep the working PointUp brand strings and @pointup/* package names — same product under a different repo name; a rename would be pure churn.
  • Legacy Python: preserved, not deleted — moved to legacy/python-selenium/. It holds the real per-provider login/extraction logic (Marriott, Southwest, United, Hyatt, Delta, American, MGM, Frontier) and is the reference for a future real TravelProviderGateway adapter.
  • Scope: full monorepo import for feature parity plus the Bedrock assistant in this PR.

What's included

Feature parity (imported from pointup):

  • @pointup/core — DDD/hexagonal domain + Drizzle schema & migrations 0000–0004
  • apps/web — Next.js 16 + Clerk; full API v1 (loyalty CRUD, sync, valuations, trends, export/import, activity, expirations + iCal, goals, notes/tags/pins, 7-day soft-delete undo, demo seed, public shares, value advice, deal scrape, assistant chat)
  • apps/worker — scheduled syncs + SES weekly digests
  • @pointup/api-client, infra/ (AWS CDK), docs/, ~65 Vitest tests

New here — AWS Bedrock Claude assistant (pointup's next-intended step):

  • BedrockAssistant implements the LlmAssistant port via the provider-neutral Converse API (@aws-sdk/client-bedrock-runtime); maps {system, messages} → Converse turns, lazy-loads the SDK, injectable client for tests.
  • Composition root selects Bedrock when LLM_PROVIDER=bedrock + BEDROCK_MODEL_ID are set → OpenAI-compatible if LLM_API_KEY → heuristic fallback. No API keys in AWS.
  • CDK grants the web task role bedrock:InvokeModel[WithResponseStream] and injects the env when -c bedrockModelId=... is provided.
  • Added bedrock-assistant.test.ts (message mapping, merge/coerce, empty-response handling).

Verification

  • 68 unit tests pass (npm run test --workspace @pointup/core), including 3 new Bedrock tests.
  • Typecheck clean across all workspaces and the standalone infra/ CDK package.
  • eslint clean (0 errors).

Follow-ups

  • Verify the Bedrock inference-profile id in-account (BEDROCK_MODEL_ID) and enable model access before deploy — the exact latest Sonnet id varies by account/region.
  • Wire real FIRECRAWL_* secrets into the CDK task env / Secrets Manager (currently stubbed).
  • Port real scraping from legacy/python-selenium/ behind TravelProviderGateway to replace the simulated gateway.
  • Close/annotate pointup PR Port pointup modernization into point_bot (+ AWS Bedrock Claude assistant) #1 pointing here.

🤖 Generated with Claude Code

…sistant

point_bot and pointup are the same loyalty-points product in different stacks:
point_bot was a discontinued Python/Selenium scraper; pointup (branch
cursor/modernize-ts-drizzle-aws-0b0a, PR #1) is the full TypeScript monorepo
modernization. This lands that modernization in its intended home.

- Preserve the original Python scrapers under legacy/python-selenium/ (real
  per-provider login/extraction logic; reference for a future real
  TravelProviderGateway adapter). Nothing deleted.
- Import the full pointup monorepo for feature parity: @pointup/core (DDD
  domain + Drizzle schema/migrations 0000-0004), apps/web (Next.js + Clerk),
  apps/worker (scheduled syncs + SES digests), @pointup/api-client, infra
  (AWS CDK), docs, and ~65 Vitest tests. Brand/packages kept as PointUp.
- Implement the previously-unfinished AWS Bedrock (Claude Sonnet) assistant:
  BedrockAssistant behind the LlmAssistant port via the Converse API
  (@aws-sdk/client-bedrock-runtime), selected in the web composition root by
  LLM_PROVIDER=bedrock + BEDROCK_MODEL_ID, with heuristic fallback and no API
  keys in AWS. Wire LLM_PROVIDER/BEDROCK_MODEL_ID/AWS_REGION into env + CDK
  task env, and grant the task role bedrock:InvokeModel[WithResponseStream].
  Add unit tests for the adapter's message mapping and response handling.
- Add docs/migration-from-pointup.md (gap analysis, parity checklist, Bedrock
  notes) and legacy/python-selenium/README.md.

Tests: 68 passing. Workspaces + infra typecheck clean; eslint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 9, 2026

Copy link
Copy Markdown

Bugbot is not enabled for this team, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

Set the documented BEDROCK_MODEL_ID example to Claude Sonnet 5 on Bedrock
(anthropic.claude-sonnet-5) across env, CDK, docs, and the adapter comment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 9, 2026

Copy link
Copy Markdown

Bugbot is not enabled for this team, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@jckail
jckail merged commit 70bb5bb into master Jul 9, 2026
2 checks passed
@jckail
jckail deleted the cursor/port-pointup-modernization-0b0a branch July 9, 2026 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant