Nicholai b20db98051
Some checks failed
CI / build-and-test (pull_request) Failing after 1m19s
feat(ci,flags,ops): ship end-to-end CI, feature-flag framework, gated surfaces, and ops docs
CI (.gitea/workflows/ci.yaml): lint → typecheck → vitest w/ coverage → OpenNext build → preview smoke → bundle-size budgets; Node 20; npm ci; artifacts; safe env; D1 dry-run scaffold.

Budgets: add scripts/budgets.mjs; TOTAL_STATIC_MAX_BYTES and MAX_ASSET_BYTES thresholds; report top offenders; fail on breach; README CI section.

Flags: add lib/flags.ts with typed booleans and safe defaults (ADMIN_ENABLED, ARTISTS_MODULE_ENABLED, UPLOADS_ADMIN_ENABLED, BOOKING_ENABLED, PUBLIC_APPOINTMENT_REQUESTS_ENABLED, REFERENCE_UPLOADS_PUBLIC_ENABLED, DEPOSITS_ENABLED, PUBLIC_DB_ARTISTS_ENABLED, ADVANCED_NAV_SCROLL_ANIMATIONS_ENABLED, STRICT_CI_GATES_ENABLED, ISR_CACHE_R2_ENABLED); robust parsing; client provider; unit tests.

Wiring: gate Admin shell and admin write APIs (503 JSON on uploads and artists writes); disable booking submit and short-circuit booking mutations when off; render static Hero/Artists when advanced animations off; tests for UI and API guards.

Ops: expand docs/prd/rollback-strategy.md with “Feature Flags Operations,” Cloudflare Dashboard and wrangler.toml steps, preview simulation, incident playbook, and post-toggle smoke checklist.

Release: add docs/releases/2025-09-19-feature-flags-rollout.md with last-good commit, preview/production flag matrices, rollback notes, and smoke results; link from rollback doc.

Chore: fix TS issues (gift-cards boolean handling, Lenis options, tailwind darkMode), remove next-on-pages peer conflict, update package.json scripts, configure Gitea act_runner label, open draft PR to trigger CI.

Refs: CI-1, FF-1, FF-2, FF-3, OPS-1
Impact: defaults preserve current behavior; no runtime changes unless flags flipped
2025-09-19 21:33:09 -06:00

1 line
8.5 KiB
JavaScript

"use strict";exports.id=5896,exports.ids=[5896],exports.modules={66696:(e,t,s)=>{s.d(t,{Footer:()=>o});var a=s(97247),i=s(28964),l=s(79906),r=s(76442),n=s(58053);function o(){let[e,t]=(0,i.useState)(!1);return(0,a.jsxs)(a.Fragment,{children:[a.jsx(n.z,{onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})},className:`fixed bottom-8 right-8 z-50 rounded-full w-12 h-12 p-0 bg-white text-black hover:bg-gray-100 shadow-lg transition-all duration-300 ${e?"opacity-100 translate-y-0":"opacity-0 translate-y-4 pointer-events-none"}`,"aria-label":"Scroll to top",children:a.jsx(r.Z,{size:20})}),a.jsx("footer",{className:"bg-black text-white py-16 font-mono",children:(0,a.jsxs)("div",{className:"container mx-auto px-8",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-12 gap-8 items-start",children:[(0,a.jsxs)("div",{className:"md:col-span-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[a.jsx("span",{className:"text-white",children:"↳"}),a.jsx("h4",{className:"text-white font-medium tracking-wide text-lg",children:"SERVICES"})]}),a.jsx("ul",{className:"space-y-3 text-base",children:[{name:"TRADITIONAL",count:""},{name:"REALISM",count:""},{name:"BLACKWORK",count:""},{name:"FINE LINE",count:""},{name:"WATERCOLOR",count:""},{name:"COVER-UPS",count:""},{name:"ANIME",count:""}].map((e,t)=>a.jsx("li",{children:(0,a.jsxs)(l.default,{href:"/book",className:"text-gray-400 hover:text-white transition-colors duration-200",children:[e.name,e.count&&a.jsx("span",{className:"text-white ml-2",children:e.count})]})},t))})]}),(0,a.jsxs)("div",{className:"md:col-span-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[a.jsx("span",{className:"text-white",children:"↳"}),a.jsx("h4",{className:"text-white font-medium tracking-wide text-lg",children:"ARTISTS"})]}),a.jsx("ul",{className:"space-y-3 text-base",children:[{name:"CHRISTY_LUMBERG",count:""},{name:"ANGEL_ANDRADE",count:""},{name:"STEVEN_SOLE",count:""},{name:"DONOVAN_L",count:""},{name:"VIEW_ALL",count:""}].map((e,t)=>a.jsx("li",{children:(0,a.jsxs)(l.default,{href:"/artists",className:"text-gray-400 hover:text-white transition-colors duration-200",children:[e.name,e.count&&a.jsx("span",{className:"text-white ml-2",children:e.count})]})},t))})]}),(0,a.jsxs)("div",{className:"md:col-span-3",children:[(0,a.jsxs)("div",{className:"text-gray-500 text-sm leading-relaxed mb-4",children:["\xa9 ",a.jsx("span",{className:"text-white underline",children:"UNITED.TATTOO"})," LLC 2025",a.jsx("br",{}),"ALL RIGHTS RESERVED."]}),(0,a.jsxs)("div",{className:"text-gray-400 text-sm",children:["5160 FONTAINE BLVD",a.jsx("br",{}),"FOUNTAIN, CO 80817",a.jsx("br",{}),a.jsx(l.default,{href:"tel:+17196989004",className:"hover:text-white transition-colors",children:"(719) 698-9004"})]})]}),(0,a.jsxs)("div",{className:"md:col-span-3 space-y-8",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[a.jsx("span",{className:"text-white",children:"↳"}),a.jsx("h4",{className:"text-white font-medium tracking-wide text-lg",children:"LEGAL"})]}),(0,a.jsxs)("ul",{className:"space-y-2 text-base",children:[a.jsx("li",{children:a.jsx(l.default,{href:"/aftercare",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"AFTERCARE"})}),a.jsx("li",{children:a.jsx(l.default,{href:"/deposit",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"DEPOSIT POLICY"})}),a.jsx("li",{children:a.jsx(l.default,{href:"/terms",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"TERMS OF SERVICE"})}),a.jsx("li",{children:a.jsx(l.default,{href:"/privacy",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"PRIVACY POLICY"})}),a.jsx("li",{children:a.jsx(l.default,{href:"#",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"WAIVER"})})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[a.jsx("span",{className:"text-white",children:"↳"}),a.jsx("h4",{className:"text-white font-medium tracking-wide text-lg",children:"SOCIAL"})]}),(0,a.jsxs)("ul",{className:"space-y-2 text-base",children:[a.jsx("li",{children:a.jsx(l.default,{href:"https://www.instagram.com/unitedtattoo719",target:"_blank",rel:"noopener noreferrer",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"INSTAGRAM"})}),a.jsx("li",{children:a.jsx(l.default,{href:"https://www.facebook.com/unitedtattoo719",target:"_blank",rel:"noopener noreferrer",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"FACEBOOK"})}),a.jsx("li",{children:a.jsx(l.default,{href:"https://www.tiktok.com/@united.tattoo",target:"_blank",rel:"noopener noreferrer",className:"text-gray-400 hover:text-white transition-colors duration-200 underline",children:"TIKTOK"})})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[a.jsx("span",{className:"text-white",children:"↳"}),a.jsx("h4",{className:"text-white font-medium tracking-wide text-lg",children:"CONTACT"})]}),a.jsx(l.default,{href:"mailto:info@united-tattoo.com",className:"text-gray-400 hover:text-white transition-colors duration-200 underline text-base",children:"INFO@UNITED-TATTOO.COM"})]})]})]}),(0,a.jsxs)("div",{className:"flex justify-end mt-8 gap-2",children:[a.jsx("div",{className:"w-3 h-3 rounded-full bg-gray-400"}),a.jsx("div",{className:"w-3 h-3 rounded-full bg-white"})]})]})})]})}},39261:(e,t,s)=>{s.d(t,{Navigation:()=>c});var a=s(97247),i=s(28964),l=s(79906),r=s(58053),n=s(37013),o=s(6683);function c(){let[e,t]=(0,i.useState)(!1),[s,c]=(0,i.useState)(!1),[d,h]=(0,i.useState)("home"),x=[{href:"#home",label:"Home",id:"home"},{href:"#artists",label:"Artists",id:"artists"},{href:"#services",label:"Services",id:"services"},{href:"#contact",label:"Contact",id:"contact"}];return a.jsx("nav",{className:`fixed top-0 left-0 right-0 z-50 transition-all duration-700 ease-out ${s?"bg-black/95 backdrop-blur-md shadow-lg border-b border-white/10 opacity-100":"bg-black/80 backdrop-blur-md lg:bg-transparent lg:opacity-0 lg:pointer-events-none opacity-100"}`,children:(0,a.jsxs)("div",{className:"max-w-screen-2xl mx-auto px-6 lg:px-12",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between h-20",children:[a.jsx(l.default,{href:"/",className:"font-bold text-xl lg:text-2xl tracking-[0.2em] transition-all duration-500 drop-shadow-lg text-white",children:"UNITED TATTOO"}),(0,a.jsxs)("div",{className:"hidden lg:flex items-center space-x-12",children:[x.map(e=>(0,a.jsxs)(l.default,{href:e.href,className:`relative text-sm font-semibold tracking-[0.1em] uppercase transition-all duration-300 group ${d===e.id?"text-white":"text-white/80 hover:text-white"}`,children:[e.label,a.jsx("span",{className:`absolute -bottom-1 left-0 h-0.5 bg-white transition-all duration-300 ${d===e.id?"w-full":"w-0 group-hover:w-full"}`})]},e.href)),a.jsx(r.z,{asChild:!0,className:"bg-white hover:bg-gray-100 text-black !text-black px-8 py-3 text-sm font-semibold tracking-[0.05em] uppercase shadow-xl hover:shadow-2xl transition-all duration-300 hover:scale-105",children:a.jsx(l.default,{href:"/book",children:"Book Now"})})]}),a.jsx("button",{className:"lg:hidden p-4 rounded-lg transition-all duration-300 text-white hover:bg-white/10",onClick:()=>t(!e),"aria-label":"Toggle menu",children:e?a.jsx(n.Z,{size:24}):a.jsx(o.Z,{size:24})})]}),e&&a.jsx("div",{className:"lg:hidden bg-black/98 backdrop-blur-md border-t border-white/10",children:(0,a.jsxs)("div",{className:"px-6 py-8 space-y-5",children:[x.map(e=>a.jsx(l.default,{href:e.href,className:`px-4 py-4 block text-lg font-semibold tracking-[0.1em] uppercase transition-all duration-300 ${d===e.id?"text-white border-l-4 border-white pl-4":"text-white/70 hover:text-white hover:pl-2"}`,onClick:()=>t(!1),children:e.label},e.href)),a.jsx(r.z,{asChild:!0,className:"w-full bg-white hover:bg-gray-100 text-black !text-black py-5 text-lg font-semibold tracking-[0.05em] uppercase shadow-xl mt-8",children:a.jsx(l.default,{href:"/book",onClick:()=>t(!1),children:"Book Now"})})]})})]})})}},86006:(e,t,s)=>{s.d(t,{$:()=>a});let a=(0,s(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/components/footer.tsx#Footer`)},94604:(e,t,s)=>{s.d(t,{W:()=>a});let a=(0,s(45347).createProxy)(String.raw`/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/components/navigation.tsx#Navigation`)}};