Skip to content

Care redesign salman#17

Merged
afsan123 merged 24 commits into
mainfrom
care-redesign-salman
Jun 4, 2026
Merged

Care redesign salman#17
afsan123 merged 24 commits into
mainfrom
care-redesign-salman

Conversation

@syed-reza98
Copy link
Copy Markdown
Member

This pull request introduces several key improvements to the project, focusing on enhancing web deployment, local development, and UI prototyping. The most significant changes include adding a GitHub Actions workflow for automated Flutter Web deployment to Vercel, introducing a new HTML prototype for the Care Redesign, and updating configuration files for both development and deployment environments.

Deployment automation and configuration:

  • Added a new GitHub Actions workflow (.github/workflows/deploy-web.yml) to automatically build and deploy the Flutter Web app to Vercel on pushes and pull requests to the main branch. This workflow uses environment secrets for sensitive API keys and integrates with Vercel for production deployment.
  • Added Vercel project configuration file (.vercel/project.json) to specify the organization and project IDs for deployment integration.

Development environment enhancements:

  • Added a local launch configuration file (.claude/launch.json) to streamline running the Flutter Web app locally with all necessary dart-define environment variables, including Supabase, Stripe, and NVIDIA API keys.
  • Expanded .claude/settings.local.json with additional bash and MCP commands, improving local development and testing workflows.

UI prototyping:

  • Added a new HTML file (PetFolio Redesign/Care Redesign/Care Redesign.html) that serves as a prototype for the Care Redesign. This file includes a comprehensive set of styles, theme support (light/dark), and scripts for responsive device scaling and React-based component rendering.

Add a self-contained web demo for the PetFolio Care redesign (HTML entry, React JSX: care_screen.jsx and ios-frame.jsx) plus multiple screenshot/assets under PetFolio Redesign/Care Redesign. Update Flutter code to reflect the redesign: lib/features/care/presentation/screens/care_screen.dart, lib/features/care/presentation/widgets/gamified_care_ui.dart and lib/features/pet_profile/presentation/screens/manage_pets_screen.dart. Also update android/gradle.properties, progress.md, and add a local .claude settings entry. This provides assets and an interactive preview for the new Care UI and gamification tweaks.
Polish the Care feature UI and badge/trophy experience. Key changes:
- Revamped Trophy Room: replaced grid with a horizontal PageView slider and new trophy card layout, improved progress/owned states, icons and animations.
- Introduced custom badge painter and refined medal disc visuals, sheen animation, shadows and sizing tweaks.
- Updated badge catalog text, emojis and descriptions to friendlier copy; added progress hint helper.
- Tweaked weekly chart labels and today indicator, updated date picker to use ClipRect + stack to fix clipping and layout.
- Minor header and accessibility fixes: static CARE eyebrow entry, theme toggle tooltip, and optional tooltip support for header icon buttons.
- Added several local cli/mobile commands to .claude/settings.local.json.
Add two log files to aid debugging: exception-log.md records a Flutter framework assertion about ListTile background color/ink splash visibility and related stack details; flutter-run-log.md captures a full `flutter run` session (Kotlin Gradle Plugin warnings, engine/renderer messages, Geolocator init, skipped frames, DevTools URL, etc.). These logs help diagnose runtime and build issues.
Update flutter_local_notifications usage to match the newer v21 API (use named params: initialize(settings: ...); zonedSchedule(id:, title:, body:, scheduledDate:, notificationDetails: ...); cancel(id: ...)). Bump dependencies in pubspec.yaml (geolocator, permission_handler, flutter_local_notifications, timezone). Add README section documenting Kotlin Gradle Plugin (KGP) migration status, current compat flags, blocked plugins, and migration steps to follow once plugins are updated.
Add additional diagnostic checks to .claude/settings.local.json (WebFetch entries for github.com, openjdk.org, inside.java, stackoverflow.com, docs.gradle.org; Bash(java -version); and a grep of pubspec.lock for specific Android plugins). Update flutter-run-log.md to reflect a new flutter run output including Java/Kotlin warnings, updated build and install timings, additional runtime log lines, and a new DevTools/Dart VM Service URL.
Introduce iOS PWA support and developer automation: add PWA detection (lib/core/utils/pwa_detector.*) and a PwaOnboardingPrompt widget integrated into AppShell and exported from widgets.dart; update web/index.html and web/manifest.json with branding, viewport/splash images, and safe-area styling; add web dependency in pubspec.yaml. Also add Claude/agent/skill and MCP tooling configs (.claude/*, .codex/config.toml, .cursor/*, .gemini/settings.json, .mcp.json, .vscode/mcp.json), new skills for migration and feature scaffolding, update CLAUDE.md with a codebase map and automation docs, and refine .cursorignore to better exclude platform/build noise and lock files. These changes enable PWA onboarding for iOS web users and add project tooling/automation for developers.
Replace direct NVIDIA API calls from the Flutter app with a Supabase Edge Function. The Dart service now invokes the new 'generate-care-routine' function (removing the hard-coded NVIDIA API key and URL and the http client import) and adapts response/error handling to Supabase function responses. Added a new supabase/functions/generate-care-routine/index.ts that authenticates the user, proxies requests to the NVIDIA Integrate API using a secret stored in Supabase, and returns the AI response. Also add .vercel to .gitignore.
Add a .vercelignore to exclude local build artifacts and tooling directories from Vercel deployments (e.g. .git, build, android, ios, docs, .dart_tool, etc.). Update supabase/.temp/cli-latest to bump the Supabase CLI from v2.101.0 to v2.104.0.
Add a Vercel configuration (vercel.json) to define the buildCommand ("flutter build web") and outputDirectory ("build/web") for deploying the Flutter web app. Remove the .vercelignore file that previously excluded various project directories from Vercel deployments.
Add a .vercelignore file containing '.git' to prevent Git metadata from being uploaded with Vercel deployments.
Add CI/CD and Vercel configuration, PWA assets, and runtime web adjustments.

- CI: Add GitHub Actions workflow to build Flutter web and deploy to Vercel (deploy-web.yml).
- Vercel: Add vercel.json (COEP/COOP headers, rewrites) and .vercel/project.json; update .gitignore to keep project.json while ignoring .vercel/output.
- Web UI: Improve web/index.html (lang, meta, theme colors, splash UI, Stripe JS load ordering, hide-on-first-frame logic) and update manifest.json for PWA metadata and icons; add pwa_banner.js to show an iOS install banner.
- Runtime: Detect kIsWeb in main.dart (skip NotificationService on web) and in care_recommendation_service.dart route AI requests via a Supabase Edge Function on web to avoid CORS; keep direct HTTP calls (with API key) for non-web builds and adjust timeouts/error handling.
- Tooling: Add .claude/launch.json and expanded .claude/settings.local.json for local dev tasks (local configs and helper commands).

These changes enable production web builds, smoother PWA behavior on mobile, and a CORS-safe approach for AI suggestions when running in the browser.
Copilot AI review requested due to automatic review settings June 3, 2026 21:11
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates PetFolio’s web/PWA deployment setup (Vercel + GitHub Actions), adds an HTML/React-based “Care Redesign” prototype bundle, and implements substantial Flutter UI refinements for the Care module (compact hero header, trophy UI redesign, weekly chart/task card tweaks), alongside several dependency and platform-guard updates to improve web compatibility.

Changes:

  • Add Vercel deployment configuration + a GitHub Actions workflow to build Flutter Web and deploy to Vercel; update web manifest/index for PWA polish (splash, install banner, theme).
  • Add “PetFolio Redesign / Care Redesign” prototype files (HTML + JSX components) as a UI handoff bundle.
  • Refactor Care UI in Flutter (hero header, trophy slider/cards, weekly chart/task cards) and adjust services for web/platform behavior (notifications guarded on web; AI routine proxy on web).

Reviewed changes

Copilot reviewed 26 out of 42 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
web/pwa_banner.js Adds an iOS-only PWA install prompt banner script.
web/manifest.json Updates PWA metadata (name/branding/colors/categories/scope).
web/index.html Adds PWA splash/loading UI, theme meta, safe-area CSS, and loads the install banner + Stripe JS.
vercel.json Defines Vercel output directory, caching headers, COOP/COEP headers, and SPA rewrites.
README.md Adds Kotlin Gradle Plugin migration notes and workaround flags documentation.
pubspec.yaml Updates several plugin dependency versions (geolocator/permission_handler/local notifications/timezone).
progress.md Adds a dated Care Screen Redesign progress entry and notes about the changes.
PetFolio Redesign/README.md Adds instructions for consuming the Claude Design handoff bundle.
PetFolio Redesign/Care Redesign/ios-frame.jsx Adds JSX components for an iOS device frame/status/nav/keyboard prototype.
PetFolio Redesign/Care Redesign/care_screen.jsx Adds a large React prototype of the redesigned Care screen with motion/depth effects.
PetFolio Redesign/Care Redesign/Care Redesign.html Adds the prototype HTML entrypoint that loads React/Babel + the JSX prototype files.
lib/main.dart Guards notification initialization so it doesn’t run on web (kIsWeb).
lib/features/pet_profile/presentation/screens/manage_pets_screen.dart Adjusts pet reorder logic and updates reorderable sliver usage.
lib/features/care/presentation/widgets/gamified_care_ui.dart Major Care UI refactor: compact hero header, trophy slider/cards + custom badge painters, weekly chart tweaks.
lib/features/care/presentation/screens/care_screen.dart Updates spacing/layout, task grouping/counting rules, utility banner, and various task card visuals/behavior.
lib/features/care/domain/services/care_recommendation_service.dart Routes web AI routine generation via a Supabase Edge Function (CORS avoidance).
lib/features/care/data/models/pet_level.dart Updates badge labels/emojis/descriptions (more branded narrative).
lib/core/widgets/app_shell.dart Tweaks header eyebrow text and adds tooltips to header icon buttons.
lib/core/services/notification_service.dart Updates API usage to match newer flutter_local_notifications named parameters.
flutter-run-log.md Adds a captured local flutter run console log.
exception-log.md Adds captured Flutter runtime exception logs.
android/gradle.properties Adds Flutter migrator Kotlin/AGP compatibility flags.
.vercel/project.json Adds Vercel org/project IDs for CLI linkage.
.gitignore Adds Vercel ignore rules while allowing .vercel/project.json.
.github/workflows/deploy-web.yml Adds a workflow to build Flutter web and deploy to Vercel.
.claude/settings.local.json Expands local Claude allowlist commands (includes machine-specific paths).
.claude/launch.json Adds a local web run config with embedded --dart-define values.
Comments suppressed due to low confidence (1)

lib/features/pet_profile/presentation/screens/manage_pets_screen.dart:45

  • Reorderable* callbacks pass newIndex as the post-drop index in the list including the removal offset. Without the standard if (newIndex > oldIndex) newIndex -= 1; adjustment, the moved item can land in the wrong position (and can hit edge cases near the end of the list).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 306 to 309
sliver: SliverReorderableList(
itemCount: pets.length,
onReorder: onReorder,
onReorderItem: onReorder,
proxyDecorator: (child, _, animation) => Material(
Comment on lines +1104 to +1114
final sheenDuration = Duration(milliseconds: 3800 + widget.index * 200);
_sheenCtrl = AnimationController(vsync: this, duration: sheenDuration);

if (widget.owned) {
final delayFraction =
(widget.index * 300 / sheenDuration.inMilliseconds).clamp(0.0, 1.0);
_sheenCtrl.forward(from: delayFraction);
_sheenCtrl.addStatusListener((s) {
if (s == AnimationStatus.completed && mounted) _sheenCtrl.repeat();
});
}
Comment thread vercel.json Outdated
Comment on lines +18 to +25
},
{
"source": "/(.*)",
"headers": [
{ "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
{ "key": "Cross-Origin-Opener-Policy", "value": "same-origin" }
]
}
Comment thread .claude/launch.json
Comment on lines +12 to +15
"--dart-define=SUPABASE_URL=https://jqyjvhwlcqcsuwcqgcwf.supabase.co",
"--dart-define=SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpxeWp2aHdsY3Fjc3V3Y3FnY3dmIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Nzg1MjI4MjgsImV4cCI6MjA5NDA5ODgyOH0.3bF68bNG0IwAc50YbOC3sem4k8O-d1vkvNNqBt1HbRw",
"--dart-define=STRIPE_PUBLISHABLE_KEY=pk_test_51TQvlrPcVRApxzIxJ8RmKYA1WEw7k8zubumbIfsDjRSGgDyAcSU22RhsZRtKIP1lAZ0wtGjpLfzjI4fozMZxGSlo006zuZrbon",
"--dart-define=NVIDIA_API_KEY=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"
Comment thread PetFolio Redesign/README.md Outdated
Comment on lines +9 to +10
**Read `petfolio-redesign/project/Care Redesign/Care Redesign.html` in full.** The user had this file open when they triggered the handoff, so it's almost certainly the primary design they want built. Read it top to bottom — don't skim. Then **follow its imports**: open every file it pulls in (shared components, CSS, scripts) so you understand how the pieces fit together before you start implementing.

Comment thread flutter-run-log.md Outdated
Comment on lines +1 to +10
PS G:\GitHub\petfolio> flutter run --dart-define-from-file=.env
Launching lib\main.dart on sdk gphone16k x86 64 in debug mode...
WARNING: Your Android app project: app located at: G:\GitHub\petfolio\android\app\build.gradle.kts
applies the Kotlin Gradle Plugin, which will cause build failures in future versions of Flutter.
Please migrate your app to Built-in Kotlin using this guide: https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-app-developers

WARNING: Your app uses the following plugins that apply Kotlin Gradle Plugin (KGP): image_picker_android, share_plus, shared_preferences_android, stripe_android, url_launcher_android
Future versions of Flutter will fail to build if your app uses plugins that apply KGP.

Please check the changelogs of these plugins and upgrade to a version that supports Built-in Kotlin.
Comment thread exception-log.md Outdated
Comment on lines +1 to +15
D/WindowOnBackDispatcher( 8540): setTopOnBackInvokedCallback (unwrapped): androidx.navigationevent.OnBackInvokedInput$createOnBackAnimationCallback$1@94b726b
D/WindowOnBackDispatcher( 8540): setTopOnBackInvokedCallback (unwrapped): android.app.Activity$$ExternalSyntheticLambda0@671fe96
D/WindowOnBackDispatcher( 8540): setTopOnBackInvokedCallback (unwrapped): androidx.navigationevent.OnBackInvokedInput$createOnBackAnimationCallback$1@94b726b
D/WindowOnBackDispatcher( 8540): setTopOnBackInvokedCallback (unwrapped): android.app.Activity$$ExternalSyntheticLambda0@671fe96
D/WindowOnBackDispatcher( 8540): setTopOnBackInvokedCallback (unwrapped): androidx.navigationevent.OnBackInvokedInput$createOnBackAnimationCallback$1@94b726b

══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════
The following assertion was thrown:
ListTile background color or ink splashes may be invisible.
The ListTile is wrapped in a DecoratedBox that has a background color. Because ListTile paints its
background and ink splashes on the nearest Material ancestor, this DecoratedBox will hide those
effects.
To fix this, wrap the ListTile in its own Material widget, or remove the background color from the
intermediate DecoratedBox.

Comment on lines +96 to +107
"Bash(git rm *)",
"Bash(dir \"G:\\\\GitHub\\\\petfolio\\\\PetFolio Redesign\\\\Care Redesign\" /b)",
"mcp__292a7621-3089-4236-bd52-07a54bf59881__list_tables",
"mcp__mobile-mcp__mobile_list_available_devices",
"mcp__mobile-mcp__mobile_take_screenshot",
"mcp__mobile-mcp__mobile_click_on_screen_at_coordinates",
"mcp__mobile-mcp__mobile_list_elements_on_screen",
"mcp__mobile-mcp__mobile_save_screenshot",
"mcp__mobile-mcp__mobile_swipe_on_screen",
"Bash(grep -E \"\\\\.\\(dart\\)$\")",
"Bash(Get-Content \"C:\\\\Users\\\\syedr\\\\AppData\\\\Local\\\\Temp\\\\claude\\\\G--GitHub-petfolio\\\\83d1e98f-3a1c-41fb-a000-787a9c3f0b74\\\\tasks\\\\bn6o3o4cc.output\" -Wait -Tail 30)",
"Bash(Select-Object -First 30)",
Comment thread web/pwa_banner.js
Comment on lines +64 to +67
document.getElementById('pwa-banner-close').addEventListener('click', function () {
localStorage.setItem('pwa_banner_dismissed', '1');
banner.style.animation = 'slideUp .25s cubic-bezier(.16,1,.3,1) reverse both';
setTimeout(function () { banner.remove(); }, 280);
Comment thread .github/workflows/deploy-web.yml Outdated
Comment on lines +35 to +40
- name: Deploy to Vercel
working-directory: build/web
run: npx vercel deploy --prod --yes --token=${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_ORG_ID: team_lC8aTJK0XiU9qDfaHeTfCJs6
VERCEL_PROJECT_ID: prj_hMHouLWimZvr5dDOlZeAhbH8xtop
Resolved 5 conflict files:
- lib/main.dart: keep both dart:ui and flutter/foundation imports (both needed)
- lib/features/care/presentation/screens/care_screen.dart: take HEAD (care redesign) — 14 conflict regions all favour the new gamified layout
- lib/features/matching/presentation/screens/matching_screen.dart: combine debounce from HEAD with _lastKnownAccess initialisation from main
- progress.md: preserve both the care-redesign and matching-P0/P1/P2 history sections
- .claude/settings.local.json: union of both branches' allowed-commands lists

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 28 out of 44 changed files in this pull request and generated 18 comments.

Comment thread .claude/launch.json
Comment on lines +12 to +15
"--dart-define=SUPABASE_URL=https://jqyjvhwlcqcsuwcqgcwf.supabase.co",
"--dart-define=SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpxeWp2aHdsY3Fjc3V3Y3FnY3dmIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Nzg1MjI4MjgsImV4cCI6MjA5NDA5ODgyOH0.3bF68bNG0IwAc50YbOC3sem4k8O-d1vkvNNqBt1HbRw",
"--dart-define=STRIPE_PUBLISHABLE_KEY=pk_test_51TQvlrPcVRApxzIxJ8RmKYA1WEw7k8zubumbIfsDjRSGgDyAcSU22RhsZRtKIP1lAZ0wtGjpLfzjI4fozMZxGSlo006zuZrbon",
"--dart-define=NVIDIA_API_KEY=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"
Comment thread .github/workflows/deploy-web.yml Outdated
Comment on lines +35 to +39
- name: Deploy to Vercel
working-directory: build/web
run: npx vercel deploy --prod --yes --token=${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_ORG_ID: team_lC8aTJK0XiU9qDfaHeTfCJs6
Comment thread vercel.json
Comment on lines +11 to +25
{
"source": "/(.*)\\.wasm",
"headers": [
{ "key": "Content-Type", "value": "application/wasm" },
{ "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
{ "key": "Cross-Origin-Opener-Policy", "value": "same-origin" }
]
},
{
"source": "/(.*)",
"headers": [
{ "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
{ "key": "Cross-Origin-Opener-Policy", "value": "same-origin" }
]
}
Comment thread web/index.html Outdated
Comment on lines +10 to +12
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
user-scalable=no, viewport-fit=cover">
Comment thread web/index.html
Comment on lines +29 to +31
<!-- iOS touch icons -->
<link rel="apple-touch-icon" sizes="180x180" href="icons/Icon-192.png">
<link rel="apple-touch-icon" sizes="512x512" href="icons/Icon-512.png">
Comment on lines +1096 to +1115
@override
void initState() {
super.initState();
_floatCtrl = AnimationController(
vsync: this,
duration: Duration(milliseconds: 3200 + widget.index * 200),
)..repeat(reverse: true);

final sheenDuration = Duration(milliseconds: 3800 + widget.index * 200);
_sheenCtrl = AnimationController(vsync: this, duration: sheenDuration);

if (widget.owned) {
final delayFraction =
(widget.index * 300 / sheenDuration.inMilliseconds).clamp(0.0, 1.0);
_sheenCtrl.forward(from: delayFraction);
_sheenCtrl.addStatusListener((s) {
if (s == AnimationStatus.completed && mounted) _sheenCtrl.repeat();
});
}
}
Comment thread .vercel/project.json
Comment on lines +1 to +4
{
"orgId": "team_lC8aTJK0XiU9qDfaHeTfCJs6",
"projectId": "prj_hMHouLWimZvr5dDOlZeAhbH8xtop"
}
Comment on lines 26 to 28
await _plugin.initialize(
const InitializationSettings(android: androidSettings, iOS: iosSettings),
settings: const InitializationSettings(android: androidSettings, iOS: iosSettings),
);
Comment on lines 78 to +83
await _plugin.zonedSchedule(
_idFor(taskId),
'Care Reminder',
title,
scheduled,
NotificationDetails(android: androidDetails),
id: _idFor(taskId),
title: 'Care Reminder',
body: title,
scheduledDate: scheduled,
notificationDetails: NotificationDetails(android: androidDetails),
Comment on lines +71 to +74
final tasks = widget.dashboard.tasks.value ?? [];
final planned = tasks.where((t) => !t.isLogDerived).toList();
final doneToday = planned.where((t) => t.isCompleted).length;
final totalToday = planned.length;
afsan123 and others added 6 commits June 4, 2026 06:45
Code fixes:
- gamified_care_ui.dart: exclude asNeeded tasks from hero doneToday/totalToday counter (consistent with CareScreen); add didUpdateWidget to _TrophyCardState so sheen animation starts when a badge becomes owned after initial build
- vercel.json: remove COEP/COOP headers from all-routes block — breaks Stripe (js.stripe.com); headers remain on /*.wasm only where cross-origin isolation is actually required
- .github/workflows/deploy-web.yml: split preview (no --prod, PR events) vs production (--prod, push to main only) to prevent PR builds overwriting production
- web/index.html: restore pinch-zoom (remove maximum-scale=1.0/user-scalable=no) for accessibility; fix apple-touch-icon sizes="192x192" to match Icon-192.png
- web/pwa_banner.js: wrap localStorage.setItem in try/catch so dismiss works in iOS private mode
- PetFolio Redesign/README.md: fix incorrect prototype path (was petfolio-redesign/project/Care Redesign/..., is PetFolio Redesign/Care Redesign/...)
- Delete flutter-run-log.md and exception-log.md (transient runtime logs, not repo artifacts)

Note: Copilot suggestions for notification_service.dart (positional args) and manage_pets_screen.dart (onReorder vs onReorderItem) were verified against the installed package APIs and found to be inverted — existing named-param style and onReorderItem are correct for flutter_local_notifications ^21 and Flutter 3.x respectively.

Database (Supabase jqyjvhwlcqcsuwcqgcwf):
- Migration pr17_revoke_anon_execute_sensitive_rpcs: revoke anon EXECUTE on ensure_direct_chat_thread, get_chat_inbox, matching_discovery_candidates — all SECURITY DEFINER functions that were accessible without authentication

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Running npx vercel deploy from the repo root (needed so Vercel reads
vercel.json for headers/rewrites) caused Vercel to attempt its own build
rather than use the pre-built Flutter Web output in build/web/.

--prebuilt instructs Vercel to skip the build phase and deploy the files
found in outputDirectory (build/web) directly.

Also consolidate VERCEL_ORG_ID/VERCEL_PROJECT_ID to job-level env block.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Trailing comma after the last headers[] entry made vercel.json invalid
JSON, causing the Vercel CLI to fail with "Couldn't parse JSON file".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
--prebuilt requires .vercel/output (Vercel Build Output API format), not
the raw build/web directory. Adding a 'npx vercel build' step packages
the Flutter output into the expected format without re-running any build.

Also add buildCommand:"" and framework:null to vercel.json so Vercel
does not attempt framework detection or a rebuild during 'vercel build'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@afsan123 afsan123 merged commit c5769f6 into main Jun 4, 2026
2 checks passed
@afsan123 afsan123 deleted the care-redesign-salman branch June 4, 2026 11:45
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.

3 participants