// Winkz Designs 2026, PORTFOLIO (filterable animated mockup gallery)
(function () {
const { useState, useEffect } = React;
const { Icon, Reveal, Eyebrow, Section, Grad, Marquee } = window;
const { EcommerceMock, PlumbingMock, CFOMock, CRMDashboard, CRMMock, ChatMock, DashboardMock, VoiceAgentMock, CommandCenter } = window;
const { Evermart, ClaritySite, Osteria, Vantage, Forge, LumenLaw, SPCR } = window;
const GRAD = 'linear-gradient(120deg,#F23BFE,#79BAFF,#2DE3EA)';
/* One uniform browser frame for every screenshot thumbnail: traffic lights always,
domain pill only when the site is actually visitable. */
const Shot = (id, src, label, domain) => function ShotMock() {
return (
{domain ? (
{domain}
) : (
)}
{src
?

:
}
);
};
const PineappleShot = Shot('shot-valuablepineapple', 'assets/portfolio/valuablepineapple.png', 'Drop a screenshot', 'valuablepineapple.com');
const IcarianShot = Shot('shot-icarian', 'assets/portfolio/icarian.png', 'Drop a screenshot', 'icarianventures.com');
const SummitShot = Shot('shot-summitslate', 'assets/portfolio/c-summit-slate.png', 'Drop a screenshot');
const NorthbendShot = Shot('shot-northbend', 'assets/portfolio/c-northbend-dental.png', 'Drop a screenshot');
const HarlanShot = Shot('shot-harlanvoss', 'assets/portfolio/c-harlan-voss.png', 'Drop a screenshot');
const FiveHourShot = Shot('shot-5hourseller', 'assets/portfolio/c-5hourseller.png', 'Drop a screenshot', '5hourseller.com');
const OsteriaShot = Shot('shot-osteria', 'assets/portfolio/c-osteria-nove.png', 'Drop a screenshot');
const EvermartShot = Shot('shot-evermart', 'assets/portfolio/c-evermart.png', 'Drop a screenshot');
const SitelineShot = Shot('shot-siteline', 'assets/portfolio/t-siteline.png', 'Drop a screenshot');
const ChairtimeShot = Shot('shot-chairtime', 'assets/portfolio/t-chairtime.png', 'Drop a screenshot');
const LoadpointShot = Shot('shot-loadpoint', 'assets/portfolio/t-loadpoint.png', 'Drop a screenshot');
const CasefileShot = Shot('shot-casefile', 'assets/portfolio/t-casefile.png', 'Drop a screenshot');
const PROJECTS = [
['The Valuable Pineapple', 'E-commerce brand partnerships', 'Websites', PineappleShot, ['Website', 'Brand', 'E-commerce'], 'https://valuablepineapple.com/', 'assets/portfolio/valuablepineapple.png'],
['Icarian Ventures', 'Brand growth partner', 'Websites', IcarianShot, ['Website', 'Brand', 'AI SEO'], 'https://icarianventures.com/', 'assets/portfolio/icarian.png'],
['SPCR Group', 'Amazon growth partner', 'Websites', SPCR, ['Website', 'Brand', 'Ecommerce'], 'https://www.spcrgroup.co.uk/'],
['Clarity HCM', 'Payroll, HR & benefits platform', 'Websites', ClaritySite, ['Website', 'Brand', 'AI'], 'https://clarity-hcm.com/'],
['5 Hour Seller', 'High-converting VSL', 'Websites', FiveHourShot, ['Website', 'VSL', 'Conversion'], 'https://5hourseller.com/'],
['Summit & Slate', 'Design-build home remodeling', 'Websites', SummitShot, ['Website', 'Brand', 'Lead gen'], null, 'assets/portfolio/summit-slate.png'],
['Northbend Dental', 'Family & cosmetic dentistry', 'Websites', NorthbendShot, ['Website', 'Booking', 'AI SEO'], null, 'assets/portfolio/northbend-dental.png'],
['Harlan & Voss', 'Boutique litigation firm', 'Websites', HarlanShot, ['Website', 'Brand', 'AI SEO'], null, 'assets/portfolio/harlan-voss.png'],
['Osteria Nove', 'Restaurant & wine bar', 'Websites', OsteriaShot, ['Website', 'Booking', 'Brand'], null, 'assets/portfolio/osteria-nove.png'],
['Evermart', 'E-commerce marketplace', 'Websites', EvermartShot, ['Website', 'E-commerce', 'Brand'], null, 'assets/portfolio/evermart.png'],
['Siteline', 'Runs a builder’s jobs, schedule and change orders in one place.', 'Software', SitelineShot, ['Custom software', 'Scheduling', 'Dashboards'], null, 'assets/portfolio/siteline.png'],
['Chairtime', 'Books the chair, fills the gaps and flags no-shows before they happen.', 'Software', ChairtimeShot, ['Booking', 'AI', 'Payments'], null, 'assets/portfolio/chairtime.png'],
['Loadpoint', 'Dispatches every load and tracks the fleet from pickup to invoice.', 'Software', LoadpointShot, ['Custom software', 'Logistics', 'Dashboards'], null, 'assets/portfolio/loadpoint.png'],
['Casefile', 'Keeps matters, deadlines and unbilled hours straight for a small firm.', 'Software', CasefileShot, ['Custom software', 'Billing', 'Internal tool'], null, 'assets/portfolio/casefile.png'],
['Northstar Finance', 'Finance dashboard', 'Software', CFOMock, ['Custom software', 'Dashboards']],
['Relay', 'Custom CRM dashboard', 'Software', CRMDashboard, ['Custom CRM', 'Dashboards']],
['Command Center', 'Distribution CRM & sourcing', 'Software', CommandCenter, ['Custom CRM', 'Dashboards', 'Internal tool']],
['Pipeline', 'Sales CRM', 'Software', CRMMock, ['Custom CRM', 'Integrations']],
['Groundwork', 'Growth analytics', 'Software', DashboardMock, ['Dashboards', 'AI SEO']],
['Ansa', 'AI support assistant', 'AI', ChatMock, ['AI chat', 'Support']],
['Atlas Voice', 'AI voice agent', 'AI', VoiceAgentMock, ['AI voice', 'Booking']],
];
const FILTERS = ['All', 'Websites', 'Software', 'AI'];
function ProjectCard({ p, delay }) {
const [name, tag, cat, M, chips, url, img] = p;
const [h, setH] = useState(false);
const [zoom, setZoom] = useState(false);
useEffect(() => {
if (!zoom) return;
const esc = (e) => e.key === 'Escape' && setZoom(false);
window.addEventListener('keydown', esc);
return () => window.removeEventListener('keydown', esc);
}, [zoom]);
return (
setH(true)} onMouseLeave={() => setH(false)} onClick={() => url && window.open(url, '_blank', 'noopener')} style={{ borderRadius: 16, overflow: 'hidden', border: '1px solid ' + (h ? 'rgba(45,227,234,0.4)' : 'rgba(255,255,255,0.1)'), background: '#0A0A0D', boxShadow: h ? '0 30px 70px -34px rgba(45,227,234,0.4)' : '0 20px 50px -34px rgba(0,0,0,0.8)', transform: h ? 'translateY(-6px)' : 'none', transition: 'all .4s cubic-bezier(.16,1,.3,1)', cursor: url ? 'pointer' : 'default' }}>
{cat.toUpperCase()}
{img && (
)}
{url &&
VIEW SITE
}
{name}
{tag}
{chips.map((c, i) => {c})}
{url ? (
e.stopPropagation()} style={{ display: 'inline-flex', alignItems: 'center', gap: 8, padding: '10px 18px', borderRadius: 10, background: GRAD, color: '#08080A', fontFamily: 'var(--font-body)', fontWeight: 700, fontSize: 13.5, boxShadow: h ? '0 14px 30px -14px rgba(242,59,254,0.7)' : 'none', transition: 'box-shadow .3s' }}>Check it out
) : (
Case study on request
)}
{zoom && img ? ReactDOM.createPortal(
{ e.stopPropagation(); setZoom(false); }} style={{ position: 'fixed', inset: 0, zIndex: 200, background: 'rgba(6,6,8,0.88)', backdropFilter: 'blur(10px)', display: 'grid', placeItems: 'center', padding: 32, cursor: 'zoom-out' }}>
e.stopPropagation()} style={{ maxWidth: 'min(1400px, 94vw)', width: '100%', cursor: 'default' }}>
, document.body) : null}
);
}
function PortfolioPage({ onNavigate }) {
const [filter, setFilter] = useState('All');
const list = filter === 'All' ? PROJECTS : PROJECTS.filter(p => p[2] === filter);
const marqueeItems = PROJECTS.map((p, i) => {
const M = p[3];
return (
);
});
return (
Selected work
Real systems, live in the wild.
Sites, software and AI we've shipped across industries. Concepts shown here, swap in live client work anytime.
{FILTERS.map(f => {
const on = filter === f;
return (
);
})}
Yours could be next.
Tell us what you need and we'll show you exactly how it comes together.
);
}
window.PortfolioPage = PortfolioPage;
})();