PageSourceSearch

https://vlad-sereda.netlify.app/case-studies/wishwave/

html vlad-sereda.netlify.app collected 2026-10-03 11:35:13 UTC 10,338 bytes, 4 lines download raw bytes

1<!DOCTYPE html><html  lang="en"><head><meta charset="utf-8">
2<!-- This site is hosted on Netlify. Anyone can build and deploy a site
3     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=3f8be9e7-6d95-4487-96d9-7361ac09a6f1
4     Netlify hosting facts for this site: static/SSR served via Netlify Edge. --><meta name="viewport" content="width=device-width, initial-scale=1"><title>Wishwave case study - Vlad Sereda</title><link rel="stylesheet" href="/_nuxt/entry.ZmcBa8Zo.css" crossorigin><meta name="theme-color" content="#101110"><meta name="google-site-verification" content="3WMW7GpEPCoi2n8xFYUO82XH1zAX0Nqt4OPeKLcgmeg"><meta name="msvalidate.01" content="2DCD24CFE654C23A6C8D4BADBBB705B1"><link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='12' fill='%23101110'/%3E%3Cpath d='M14 18l18 30 18-30M25 18l7 12 7-12' fill='none' stroke='%23d3fa6b' stroke-width='6'/%3E%3C/svg%3E"><link rel="canonical" href="https://vlad-sereda.netlify.app/case-studies/wishwave/"><meta name="description" content="A wishlist and gift-registry product built as three applications - a website, a mobile app and a browser extension - sharing one frontend architecture."><meta property="og:title" content="Wishwave case study - Vlad Sereda"><meta property="og:description" content="A wishlist and gift-registry product built as three applications - a website, a mobile app and a browser extension - sharing one frontend architecture."><meta property="og:type" content="website"><meta property="og:site_name" content="Vlad Sereda"><meta property="og:url" content="https://vlad-sereda.netlify.app/case-studies/wishwave/"><meta property="og:image" content="https://vlad-sereda.netlify.app/images/wishwave-full.webp"><meta property="og:image:width" content="1600"><meta property="og:image:height" content="1200"><meta property="og:image:alt" content="Wishwave website, mobile app and browser extension interfaces"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Wishwave case study - Vlad Sereda"><meta name="twitter:description" content="A wishlist and gift-registry product built as three applications - a website, a mobile app and a browser extension - sharing one frontend architecture."><meta name="twitter:image" content="https://vlad-sereda.netlify.app/images/wishwave-full.webp">
4<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"CreativeWork","name":"Wishwave","description":"A wishlist and gift-registry product built as three applications - a website, a mobile app and a browser extension - sharing one frontend architecture.","url":"https://vlad-sereda.netlify.app/case-studies/wishwave/","image":"https://vlad-sereda.netlify.app/images/wishwave-full.webp","keywords":"Vue 3, TypeScript, Quasar, Pinia, pnpm, SSR, Capacitor, Browser extension, SCSS","creator":{"@type":"Person","name":"Vlad Sereda","url":"https://vlad-sereda.netlify.app/"},"sameAs":["https://wishwave.com","https://apps.apple.com/us/app/wishwave-wish-list-registry/id6762080684","https://play.google.com/store/apps/details?id=com.wishwave.app","https://chromewebstore.google.com/detail/glkmlglpkifojobblaaednkoapicogll","https://www.greetingsisland.com/"],"provider":{"@type":"Organization","name":"Greetings Island","url":"https://www.greetingsisland.com/"},"additionalProperty":[{"@type":"PropertyValue","name":"shared packages","value":"~30"},{"@type":"PropertyValue","name":"to first production release","value":"2 months"},{"@type":"PropertyValue","name":"users","value":"~5,000"},{"@type":"PropertyValue","name":"web / mobile / browser extension","value":"3 platforms"},{"@type":"PropertyValue","name":"architecture → implementation → delivery","value":"Solo ownership"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://vlad-sereda.netlify.app/"},{"@type":"ListItem","position":2,"name":"Wishwave","item":"https://vlad-sereda.netlify.app/case-studies/wishwave/"}]}]}</script>
4</head><body><div id="__nuxt"><div><a class="skip" href="#main">Skip to content</a><header class="header"><a class="brand" href="/" aria-label="Vlad Sereda home"> vs <span><span class="arrow-icon" aria-hidden="true"></span></span></a><nav aria-label="Main navigation"><!--[--><a href="/portfolio/">All projects</a><a href="/#experience">Experience</a><a href="/about-vlad-sereda/">About</a><!--]--></nav><a class="nav-contact" href="/#contact"> Let’s talk <span><span class="arrow-icon" aria-hidden="true"></span></span></a></header><main id="main" class="case-page"><div class="case-top"><a class="back-link" href="/#work"><span class="arrow-icon arrow-left" aria-hidden="true"></span> Selected work </a><span class="eyebrow">CASE STUDY / 01</span></div><div class="case-heading"><p class="eyebrow">CROSS-PLATFORM PRODUCT</p><h1>Wishwave</h1><p class="case-subtitle">One product. Three surfaces.</p><p>A wishlist and gift-registry product built as three applications - a website, a mobile app and a browser extension - sharing one frontend architecture.</p></div><div class="case-facts"><div><span>ROLE</span>
4<p>Senior Frontend Engineer</p></div><div><span>TEAM</span><p><a href="https://www.greetingsisland.com/" target="_blank" rel="noopener noreferrer">Greetings Island</a></p></div><div><span>PERIOD</span><p>Dec 2025 - Aug 2026</p></div></div><div class="case-stats"><!--[--><div><strong>~30</strong><span>shared packages</span></div><div><strong>2 months</strong><span>to first production release</span></div><div><strong>~5,000</strong><span>users</span></div><div><strong>3 platforms</strong><span>web / mobile / browser extension</span></div><div><strong>Solo ownership</strong><span>architecture → implementation → delivery</span></div><!--]--></div><figure class="case-visual"><img src="/images/wishwave-full.webp" width="1600" height="1200" alt="Wishwave website, mobile app and browser extension interfaces" loading="lazy" decoding="async"></figure><div class="case-narrative"><section><p class="eyebrow">01 / CHALLENGE</p><h2> The engineering <br><span>problem.</span></h2><p>Greetings Island needed a wishlist and gift-registry product across a server-rendered website, a mobile app and a browser extension, without three disconnected frontends or duplicated logic between them.</p></section><section><p class="eyebrow">02 / MY CONTRIBUTION</p><h2> Ownership <br><span>through delivery.</span></h2><ul class="feature-list"><!--[--><li>Owned the entire frontend implementation end to end - architecture, features and production delivery - as the sole frontend engineer on the product.</li><li>Designed a pnpm monorepo of around 30 shared packages powering the website, mobile app and browser extension.</li><li>Built the applications with Vue 3, TypeScript and Quasar, with Capacitor packaging the shared codebase for iOS and Android.</li><li>Delivered the first production version within two months of starting development.</li><!--]--></ul></section><section><p class="eyebrow">03 / SOLUTION</p><h2> How we <br><span>built it.</span></h2><p>We structured Wishwave as a pnpm monorepo with roughly 30 packages sharing components, utilities and business logic across the website, mobile app and browser extension. Vue 3, TypeScript and Quasar formed the core stack, with Capacitor bridging the shared frontend to iOS and Android, keeping platform-specific behavior isolated from the shared foundation.</p><div class="case-tags"><!--[--><span>Vue 3</span><span>TypeScript</span><span>Quasar</span><span>Pinia</span><span>pnpm</span><span>SSR</span><span>Capacitor</span><span>Browser extension</span><span>SCSS</span><!--]--></div></section><section><p class="eyebrow">04 / RESULT</p><h2> What we <br><span>delivered.</span></h2><p>We shipped the first production version within two months and grew Wishwave to roughly 5,000 users across web, mobile and the browser extension, with the entire frontend built and owned by a single engineer.</p><figure class="case-endorsement"><blockquote>“Vlad joined us to build Wishwave and ended up carrying most of the frontend himself.”</blockquote><figcaption>Ehud Zamir · Founder &amp; CEO, Greetings Island</figcaption></figure></section><section><p class="eyebrow">05 / LIVE PRODUCT</p><h2> See it <br><span>live.</span></h2><ul class="case-links"><!--[--><li><a href="https://wishwave.com" target="_blank" rel="noopener noreferrer">Live website <span class="arrow-icon" aria-hidden="true"></span></a></li><li><a href="https://apps.apple.com/us/app/wishwave-wish-list-registry/id6762080684" target="_blank" rel="noopener noreferrer">App Store <span class="arrow-icon" aria-hidden="true"></span></a></li><li><a href="https://play.google.com/store/apps/details?id=com.wishwave.app" target="_blank" rel="noopener noreferrer">Google Play <span class="arrow-icon" aria-hidden="true"></span></a></li><li><a href="https://chromewebstore.google.com/detail/glkmlglpkifojobblaaednkoapicogll" target="_blank" rel="noopener noreferrer">Chrome extension <span class="arrow-icon" aria-hidden="true"></span></a></li><li><a href="https://www.greetingsisland.com/" target="_blank" rel="noopener noreferrer">Greetings Island <span class="arrow-icon" aria-hidden="true"></span></a></li>
4<!--]--></ul></section></div><div class="case-contact"><p>Building something with similar complexity?</p><a class="button" href="mailto:[email protected]"> Let’s talk <span><span class="arrow-icon" aria-hidden="true"></span></span></a></div><a class="next-project" href="/case-studies/e-vybir/"><div><span class="eyebrow">NEXT CASE STUDY</span><h2>e-vybir</h2></div><span aria-hidden="true"><span class="arrow-icon" aria-hidden="true"></span></span></a></main><footer><a class="brand" href="/"> vs <span><span class="arrow-icon" aria-hidden="true"></span></span></a><p>© 2026 Vlad Sereda</p><a href="/#contact"> Let’s talk <span class="arrow-icon" aria-hidden="true"></span></a></footer></div></div><div id="teleports"></div></body></html>
4<script async src="/.netlify/scripts/hud?variant=public" data-nf-variant="public" data-netlify-site-id="3f8be9e7-6d95-4487-96d9-7361ac09a6f1" data-app-host="app.netlify.com"></script>
vendor: 1 bytes, line 4
4

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.