Port pointup modernization into point_bot (+ AWS Bedrock Claude assistant) - #1
Merged
Merged
Conversation
…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>
|
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>
|
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. |
This was referenced Jul 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
point_botandjckail/pointupare the same loyalty-points product in two stacks.point_botwas a discontinued Python/Selenium scraper;pointup(branchcursor/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)
@pointup/*package names — same product under a different repo name; a rename would be pure churn.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 realTravelProviderGatewayadapter.What's included
Feature parity (imported from pointup):
@pointup/core— DDD/hexagonal domain + Drizzle schema & migrations0000–0004apps/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 testsNew here — AWS Bedrock Claude assistant (pointup's next-intended step):
BedrockAssistantimplements theLlmAssistantport via the provider-neutral Converse API (@aws-sdk/client-bedrock-runtime); maps{system, messages}→ Converse turns, lazy-loads the SDK, injectable client for tests.LLM_PROVIDER=bedrock+BEDROCK_MODEL_IDare set → OpenAI-compatible ifLLM_API_KEY→ heuristic fallback. No API keys in AWS.bedrock:InvokeModel[WithResponseStream]and injects the env when-c bedrockModelId=...is provided.bedrock-assistant.test.ts(message mapping, merge/coerce, empty-response handling).Verification
npm run test --workspace @pointup/core), including 3 new Bedrock tests.infra/CDK package.Follow-ups
BEDROCK_MODEL_ID) and enable model access before deploy — the exact latest Sonnet id varies by account/region.FIRECRAWL_*secrets into the CDK task env / Secrets Manager (currently stubbed).legacy/python-selenium/behindTravelProviderGatewayto replace the simulated gateway.🤖 Generated with Claude Code