{"id":29888579,"url":"https://github.com/fran-dv/zorro-viejo","last_synced_at":"2026-04-08T20:03:16.038Z","repository":{"id":305997266,"uuid":"1005666969","full_name":"fran-dv/zorro-viejo","owner":"fran-dv","description":"React + Supabase e-commerce (freelance project, open-sourced with permission)","archived":false,"fork":false,"pushed_at":"2025-08-17T18:18:03.000Z","size":8406,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-17T19:29:31.071Z","etag":null,"topics":["css-modules","e-commerce","react","supabase","tanstack-query","typescript","zod","zustand"],"latest_commit_sha":null,"homepage":"https://zorro-viejo.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fran-dv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-20T15:47:28.000Z","updated_at":"2025-08-17T18:18:06.000Z","dependencies_parsed_at":"2025-08-17T19:29:26.058Z","dependency_job_id":null,"html_url":"https://github.com/fran-dv/zorro-viejo","commit_stats":null,"previous_names":["fran-dv/zorro-viejo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fran-dv/zorro-viejo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fran-dv%2Fzorro-viejo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fran-dv%2Fzorro-viejo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fran-dv%2Fzorro-viejo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fran-dv%2Fzorro-viejo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fran-dv","download_url":"https://codeload.github.com/fran-dv/zorro-viejo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fran-dv%2Fzorro-viejo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31571601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css-modules","e-commerce","react","supabase","tanstack-query","typescript","zod","zustand"],"created_at":"2025-07-31T21:00:21.203Z","updated_at":"2026-04-08T20:03:16.029Z","avatar_url":"https://github.com/fran-dv.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zorro Viejo Beverages E‑commerce\n\n**A freelance project**: e-commerce platform for buying alcoholic beverages. This project aims to deliver a clean, mobile‑first shopping experience for customers and a user‑friendly interface for the admin, keeping the product catalog always up to date. Per client requirements, the checkout flow replaces a traditional payment gateway with WhatsApp redirection, while maintaining internal order tracking for reliability.\n\n**Visit web:** [zorroviejo.shop](https://zorroviejo.shop/)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"preview-images/products.png\" alt=\"Products list view (mobile)\" width=\"250\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"preview-images/search.png\" alt=\"Search view (mobile)\" width=\"250\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"preview-images/product-detail.png\" alt=\"Product detail view (mobile)\" width=\"250\"/\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"preview-images/cart.png\" alt=\"Cart view (mobile)\" width=\"250\"/\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Features\n\n- Mobile‑first, fully responsive design\n- Product filtering by category\n- Pagination\n- Loading skeletons during data fetch\n- Product search by name\n- Snackbars for “add to cart” feedback\n- Product detail view with image carousel for multiple images\n- Related products carousel in product detail view\n- Persistent shopping cart (global state via Zustand)\n- Cart badge counter\n- Checkout flow with WhatsApp redirection (pre‑filled order message)\n- QR code for WhatsApp redirection in checkout success view\n- Order creation and storage via Supabase + TanStack Query\n- Advanced form validation with React Hook Form + Zod resolver\n- Admin authentication with Supabase + refine.dev\n- Protected routes with admin guard (redirect to login if unauthenticated)\n- Internal order tracking (admin only)\n- Data fetching using TanStack Query hooks + Supabase API\n- Type‑safe models with Zod schemas and TypeScript\n- API response transformation to local models via Zod\n- User-friendly fetch error handling with retry button\n- Global error handling via Error Boundaries (error view with retry button and contact link for unrecoverable errors)\n- AG Grid for admin data tables (orders and products)\n- Bulk CSV products import\n- CSV products export\n\n## Tech Stack\n\n**Core \u0026 Tooling:**\n\n- React\n- TypeScript\n- Zod\n- Vite\n- ESLint\n- Prettier\n- bun (as package manager)\n\n**Data \u0026 State:**\n\n- Supabase\n- TanStack Query\n- Zustand\n\n**UI \u0026 Styling:**\n\n- CSS Modules\n- Radix UI\n- Embla Carousel\n- React Loading Skeleton\n- Lucide React Icons\n\n**Others:**\n\n- React Hook Form (with zod resolver)\n- React Router\n- refine.dev\n- usehooks-ts\n- qrcode.react\n- AG Grid\n\n## Installation\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/fran-dv/zorro-viejo.git\n\n# cd into the project directory\ncd zorro-viejo\n```\n\n### 2. Install dependencies\n\n```bash\nbun install\n```\n\n### 3.Configure environment variables\n\n- Create a Supabase account and project to obtain your credentials.\n- If your databases schemas differ from the ones in this project, update the Zod schemas in src/models.\n- In the project root, create a .env.local file containing:\n\n```bash\nVITE_SUPABASE_URL=your_supabase_url\nVITE_SUPABASE_ANON_KEY=your_supabase_anon_key\nVITE_WHATSAPP_REDIRECT_NUMBER=your_phone_number\nVITE_APP_URL=your_app_domain\n```\n\n### 4. Run the development server\n\n```bash\nbun run dev # or `bun run dev --host 0.0.0.0` for network exposure\n```\n\n### 5. Open the app\n\nVisit http://localhost:5173 (or http://\u003cyour-ip\u003e:5173 from another device) in your browser.\n\n---\n\n_Built with 💚 by Francisco Della Vedova_\n📧 franciscodellav@gmail.com • 💼 [Linkedin](https://www.linkedin.com/in/francisco-della-vedova-702154316/) • 🔗 [Github](https://github.com/fran-dv)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffran-dv%2Fzorro-viejo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffran-dv%2Fzorro-viejo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffran-dv%2Fzorro-viejo/lists"}