1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <meta name="theme-color" content="#08090c" /> 7 <meta name="color-scheme" content="dark" /> 8 <meta name="description" content="A React and Spring Boot owners-committee app for issue tracking, governance decisions, voting, action items, documents and auditable follow-up." /> 9 <meta name="author" content="Pratyush Kumar" /> 10 <meta name="robots" content="index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1" /> 11 <link rel="canonical" href="https://erpratyush.me/projects/owners-committee-app/" /> 12 <link rel="icon" href="/favicon.svg" type="image/svg+xml" /> 13 <link rel="stylesheet" href="/seo.css" /> 14 <link rel="me" href="https://www.linkedin.com/in/erpratyush" /> 15 <link rel="me" href="https://gitlab.erpratyush.me/pratyush" /> 16 <meta property="og:site_name" content="Pratyush Kumar" /> 17 <meta property="og:locale" content="en_GB" /> 18 <meta property="og:type" content="article" /> 19 <meta property="og:title" content="Owners Committee App â Issues, Voting & Documents | Pratyush Kumar" /> 20 <meta property="og:description" content="A React and Spring Boot owners-committee app for issue tracking, governance decisions, voting, action items, documents and auditable follow-up." /> 21 <meta property="og:url" content="https://erpratyush.me/projects/owners-committee-app/" /> 22 <meta property="og:image" content="https://erpratyush.me/og/portfolio.png" /> 23 <meta property="og:image:width" content="1200" /> 24 <meta property="og:image:height" content="630" /> 25 <meta property="og:image:alt" content="Pratyush Kumar â Senior Tech Lead and systems builder" /> 26 <meta name="twitter:card" content="summary_large_image" /> 27 <meta name="twitter:title" content="Owners Committee App â Issues, Voting & Documents | Pratyush Kumar" /> 28 <meta name="twitter:description" content="A React and Spring Boot owners-committee app for issue tracking, governance decisions, voting, action items, documents and auditable follow-up." /> 29 <meta name="twitter:image" content="https://erpratyush.me/og/portfolio.png" /> 30 <title>Owners Committee App â Issues, Voting & Documents | Pratyush Kumar</title> 31
31<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"TechArticle","@id":"https://erpratyush.me/projects/owners-committee-app/#article","headline":"Owners Committee Operations","description":"A React and Spring Boot owners-committee app for issue tracking, governance decisions, voting, action items, documents and auditable follow-up.","url":"https://erpratyush.me/projects/owners-committee-app/","mainEntityOfPage":"https://erpratyush.me/projects/owners-committee-app/","author":{"@id":"https://erpratyush.me/#person"},"publisher":{"@id":"https://erpratyush.me/#person"},"keywords":"React, TypeScript, Spring Boot, PostgreSQL, PWA","about":[{"@type":"Thing","name":"React"},{"@type":"Thing","name":"TypeScript"},{"@type":"Thing","name":"Spring Boot"},{"@type":"Thing","name":"PostgreSQL"},{"@type":"Thing","name":"PWA"}],"inLanguage":"en"},{"@type":"Person","@id":"https://erpratyush.me/#person","name":"Pratyush Kumar","url":"https://erpratyush.me/","jobTitle":"Senior Tech Lead","worksFor":{"@type":"Organization","name":"Virtusa"},"sameAs":["https://www.linkedin.com/in/erpratyush","https://gitlab.erpratyush.me/pratyush"],"knowsAbout":["Java","Spring Boot","React","TypeScript","Enterprise software","Corporate banking","KYC","Workflow automation","BPMN","Kubernetes","Proxmox","TrueNAS","OPNsense","System architecture"],"homeLocation":{"@type":"City","name":"Dubai"}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://erpratyush.me/"},{"@type":"ListItem","position":2,"name":"Projects","item":"https://erpratyush.me/#work"},{"@type":"ListItem","position":3,"name":"Owners Committee Operations","item":"https://erpratyush.me/projects/owners-committee-app/"}]}]}</script>
31</head> 32 <body style="margin:0;background:#08090c"> 33 <div class="case-page"> 34 <div class="seo-wrap"> 35 <header class="seo-topbar"><a class="seo-brand" href="/"><span>PK</span><i>/</i></a><nav><a href="/#work">Work</a><a href="/#experience">Experience</a><a href="https://gitlab.erpratyush.me/pratyush">GitLab</a><a href="mailto:[email protected]">Contact</a></nav></header> 36 <nav class="case-breadcrumb" aria-label="Breadcrumb"><a href="/">Home</a><span>/</span><a href="/#work">Projects</a><span>/</span><span>Owners Committee Operations</span></nav> 37 <main> 38 <article> 39 <header class="case-hero"><div class="seo-kicker">Personal · Governance · Building Operations</div><h1>Owners Committee Operations</h1><p class="case-lead">A committee-only operating workspace for residential owners committees â bringing issues, decisions, action items, voting and documents into one auditable place instead of losing context across chat threads.</p><div class="case-meta"><span>React</span><span>TypeScript</span><span>Spring Boot</span><span>PostgreSQL</span><span>PWA</span></div></header> 40 <div class="case-grid"> 41 <nav class="case-nav" aria-label="On this page"><a href="#challenge">01 / Challenge</a><a href="#build">02 / Build</a><a href="#outcome">03 / Outcome</a></nav> 42 <div class="case-content"> 43 <section class="case-section" id="challenge"><div class="seo-label">01 / CHALLENGE</div><h2>The problem behind the system.</h2><p>Owners committees need to track issues, ownership, follow-ups and governance decisions over long periods. Chat is useful for conversation, but it is a poor system of record: assignments disappear in threads, documents become hard to find and it is difficult to reconstruct why a decision was made.</p></section> 44 <section class="case-section" id="build"><div class="seo-label">02 / BUILD</div><h2>How I approached it.</h2><ul><li>Started with a committee-only issue tracker covering assignment, category, priority, status, due dates, comments, photo/file attachments, activity history, search, My Issues and overdue work.</li><li>Designed the issue timeline as an auditable record: tracked changes create activity events, comments remain append-only, and supporting files stay attached to the work they relate to.</li><li>Expanded the product model beyond issue tracking into committee governance â meetings, decisions, action items and voting â so an agreed decision can become accountable follow-up work instead of another message in a group chat.</li><li>Added document-management flows so committee files can live alongside the issues, comments and decisions that give them context.</li><li>Built it as a responsive React + TypeScript PWA backed by Spring Boot, PostgreSQL and authenticated APIs, with the product intentionally scoped around committee operations rather than becoming a full property-management platform.</li></ul></section> 45 <section class="case-section" id="outcome"><div class="seo-label">03 / OUTCOME</div><h2>What the system enabled.</h2><p>The app is becoming a shared operating record for the committee: one place to see what needs attention, who owns it, what evidence or documents are attached, what the committee decided and what still needs to happen. It is also a product-design exercise in turning informal building governance into simple, traceable software workflows.</p><p class="case-note">The product is being developed iteratively for committee use. Resident, vendor and full community-management workflows are intentionally outside the initial product scope.</p><div class="case-actions"><a class="case-button" href="/#work">Back to selected work â</a></div></section> 46 </div> 47 </div> 48 </article> 49 <section class="more-work"><div class="seo-label">/ MORE WORK</div><h2>Keep exploring.</h2><div class="more-grid"><a class="more-card" href="/work/corporate-banking-onboarding-kyc/"><small>Current · Corporate Banking · Client Lifecycle</small><h3>Corporate Banking Onboarding & KYC</h3><p>Building the journeys that bring corporate clients into the bank and keep their KYC current â turning a long-running, document-heavy lifecycle into software people can navigate and operate.</p></a>
49<a class="more-card" href="/work/investment-order-management/"><small>Previous · Investments · Order Workflow</small><h3>Investment Order Management</h3><p>An order-management workflow for investment teams â carrying securities buy/sell instructions from the relationship manager through approvals, market execution and operational settlement.</p></a><a class="more-card" href="/projects/veloflow/"><small>Personal · Workflow engine</small><h3>VeloFlow</h3><p>A personal workflow project shaped by years of enterprise BPM experience â exploring how orchestration can feel lighter, clearer and more developer-friendly.</p></a><a class="more-card" href="/projects/banguardian/"><small>Personal · Security automation</small><h3>BanGuardian</h3><p>A central control plane that turns Fail2ban events into network-edge enforcement through OPNsense instead of leaving every server to defend itself in isolation.</p></a></div></section> 50 </main> 51 <footer class="seo-footer"><span>Pratyush Kumar © 2026</span><span><a href="https://www.linkedin.com/in/erpratyush">LinkedIn</a> · <a href="https://gitlab.erpratyush.me/pratyush">GitLab</a></span></footer> 52 </div> 53 </div> 54 </body> 55</html>
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.