<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects |</title><link>http://samsantana.com/projects/</link><atom:link href="http://samsantana.com/projects/index.xml" rel="self" type="application/rss+xml"/><description>Projects</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 19 May 2024 00:00:00 +0000</lastBuildDate><image><url>http://samsantana.com/media/icon_hu_ac3ff8ebaea3d544.png</url><title>Projects</title><link>http://samsantana.com/projects/</link></image><item><title>Nginx Feature Management Tool</title><link>http://samsantana.com/projects/feature-management-tool/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>http://samsantana.com/projects/feature-management-tool/</guid><description>&lt;h3 id="the-challenge"&gt;The Challenge&lt;/h3&gt;
&lt;p&gt;Managing the complex Nginx configurations for our application required precise text file edits.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Risk:&lt;/strong&gt; Technicians and QA staff, though skilled, occasionally made syntax errors (missing semicolons, bad paths) when editing &lt;code&gt;nginx.conf&lt;/code&gt; manually.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Consequence:&lt;/strong&gt; A bad config meant the web server wouldn&amp;rsquo;t start, causing immediate service downtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-solution"&gt;The Solution&lt;/h3&gt;
&lt;p&gt;I developed a &lt;strong&gt;WPF-based Infrastructure Management Tool&lt;/strong&gt; (written in PowerShell with embedded XAML) that abstracted the complexity and enforced &amp;ldquo;Defensive Programming&amp;rdquo; principles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Abstraction Layer&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replaced raw text editors with a GUI form. Users selected options (dropdowns, toggles) rather than typing code.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;The tool programmatically generated the valid configuration blocks based on user input.
&lt;strong&gt;2. Validation Loop (The &amp;ldquo;Safety Net&amp;rdquo;)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Before applying any change, the tool generated a temporary config file.&lt;/li&gt;
&lt;li&gt;It ran a silent &lt;code&gt;nginx -t -c temp.conf&lt;/code&gt; command to validate the syntax against the actual Nginx binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logic:&lt;/strong&gt; If the exit code was non-zero (error), the tool blocked the application and alerted the user with the specific error message. The live production config was never touched.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Atomic Rollback&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the validation passed, the tool backed up the current configuration (timestamped).&lt;/li&gt;
&lt;li&gt;It applied the new config and attempted a service reload.&lt;/li&gt;
&lt;li&gt;If the reload hung or failed, the tool automatically restored the backup file, returning the system to its last known good state.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-outcome"&gt;The Outcome&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Uptime:&lt;/strong&gt; Eliminated service outages caused by invalid configurations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empowerment:&lt;/strong&gt; Allowed non-systems staff to safely manage complex infrastructure settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; Reduced troubleshooting time effectively to zero, as the system refused to accept broken states.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="results"&gt;Results&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;📈 &lt;strong&gt;Users&lt;/strong&gt;: 2000+ active users within 3 months&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;Product Hunt&lt;/strong&gt;: Featured and received 200+ upvotes&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Performance&lt;/strong&gt;: Sub-100ms API response times&lt;/li&gt;
&lt;li&gt;💯 &lt;strong&gt;Uptime&lt;/strong&gt;: 99.8% uptime since launch&lt;/li&gt;
&lt;li&gt;📱 &lt;strong&gt;Mobile&lt;/strong&gt;: 40% of traffic from mobile devices&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tech-stack"&gt;Tech Stack&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Next.js 14 (App Router)&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Framer Motion (animations)&lt;/li&gt;
&lt;li&gt;React Beautiful DnD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Next.js API Routes&lt;/li&gt;
&lt;li&gt;Prisma ORM&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Socket.io for WebSockets&lt;/li&gt;
&lt;li&gt;NextAuth.js for authentication&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vercel for hosting&lt;/li&gt;
&lt;li&gt;Supabase for PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis Cloud for caching&lt;/li&gt;
&lt;li&gt;AWS S3 for file storage&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-feedback"&gt;User Feedback&lt;/h2&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;Finally, a task manager that doesn&amp;rsquo;t get in my way. The real-time updates are magical!&amp;rdquo; - Sarah K., Product Manager&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&amp;ldquo;We switched from Trello and haven&amp;rsquo;t looked back. TaskFlow is faster and more intuitive.&amp;rdquo; - Mike R., Engineering Lead&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="open-source"&gt;Open Source&lt;/h2&gt;
&lt;p&gt;TaskFlow is open source! Contributions welcome.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;License&lt;/strong&gt;: MIT&lt;br&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;:
&lt;br&gt;
&lt;strong&gt;Demo&lt;/strong&gt;:
&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s Next&lt;/h2&gt;
&lt;p&gt;Currently working on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Mobile apps (iOS &amp;amp; Android)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Gantt chart view&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Advanced reporting and analytics&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; API for third-party integrations&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Offline mode support&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Status&lt;/strong&gt;: ✅ Live &amp;amp; Actively Maintained&lt;br&gt;
&lt;strong&gt;Try it&lt;/strong&gt;:
&lt;/p&gt;</description></item><item><title>Kiosk Lockdown</title><link>http://samsantana.com/projects/kiosk-lockdown/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate><guid>http://samsantana.com/projects/kiosk-lockdown/</guid><description>&lt;h2 id="case-study-1-legacy-modernization--secure-kiosk-architecture"&gt;CASE STUDY 1: Legacy Modernization &amp;amp; Secure Kiosk Architecture&lt;/h2&gt;
&lt;h3 id="the-challenge"&gt;The Challenge&lt;/h3&gt;
&lt;p&gt;With the End-of-Life (EOL) for Windows 10 approaching, the organization faced a critical decision regarding its field devices (currently 2 deployed, with plans to scale to hundreds).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Risk:&lt;/strong&gt; Continuing to run an unsupported OS would expose the fleet to unpatched security vulnerabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Constraint:&lt;/strong&gt; The core proprietary application was a legacy Windows binary. Rewriting it for Linux native would take years and cost significant resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Hardware:&lt;/strong&gt; Replacing the hardware fleet to support Windows 11 was cost-prohibitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-solution"&gt;The Solution&lt;/h3&gt;
&lt;p&gt;I architected a bridge solution using &lt;strong&gt;WINE&lt;/strong&gt; (compatibility layer) and a custom Linux &amp;ldquo;Golden Image&amp;rdquo; to extend the hardware lifespan while maintaining security compliance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Compatibility Layer Engineering&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validated the proprietary Windows application&amp;rsquo;s stability running under WINE.&lt;/li&gt;
&lt;li&gt;Scripted the WINE prefix configuration to ensure all necessary Windows DLLs and fonts were pre-staged, creating a seamless runtime environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. The &amp;ldquo;Golden Image&amp;rdquo; Architecture&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilized &lt;strong&gt;Cubic&lt;/strong&gt; to create a custom Linux Mint ISO.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technician UX:&lt;/strong&gt; Built a &amp;ldquo;First-Boot&amp;rdquo; utility. Technicians simply plug in a USB drive containing the proprietary application folder. My utility automatically ingests the files, sets up the WINE environment, and configures the host.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Role-Based Access:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kiosk User:&lt;/strong&gt; Auto-logs in to a locked-down XFCE desktop environment with no terminal access or visible file system. The legacy app auto-launches on boot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin User:&lt;/strong&gt; Created by the technician during setup, allowing privileged maintenance access when required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Security Hardening&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migrated from an EOL Windows environment to a maintained Linux LTS kernel.&lt;/li&gt;
&lt;li&gt;Enabled automatic security updates for the host OS while keeping the legacy application contained.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-outcome"&gt;The Outcome&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cost Avoidance:&lt;/strong&gt; Saved the organization estimated hardware replacement costs by extending the life of existing PCs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operational Efficiency:&lt;/strong&gt; Technicians could provision a secure, &amp;ldquo;ready-to-go&amp;rdquo; machine in 15 minutes using the standardized ISO.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tech-stack-details"&gt;Tech Stack Details&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Slick Greeter&lt;/li&gt;
&lt;li&gt;XFCE&lt;/li&gt;
&lt;li&gt;Bash Scripting&lt;/li&gt;
&lt;li&gt;Wine&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Nginx Apt Cache Server</title><link>http://samsantana.com/projects/nginx-caching/</link><pubDate>Sat, 14 Dec 2024 00:00:00 +0000</pubDate><guid>http://samsantana.com/projects/nginx-caching/</guid><description>&lt;h3 id="the-challenge"&gt;The Challenge&lt;/h3&gt;
&lt;p&gt;As we prepare to migrate hundreds of devices to Linux Mint, automatic security updates will be essential for compliance. However, this introduces a physical infrastructure scaling problem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Bottleneck:&lt;/strong&gt; When hundreds of devices simultaneously attempt to download &lt;code&gt;apt&lt;/code&gt; updates from the internet, it would saturate the local network bandwidth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Impact:&lt;/strong&gt; Updates would time out, fail, or degrade the performance of the core business application running on the devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-solution"&gt;The Solution&lt;/h3&gt;
&lt;p&gt;I implemented an &lt;strong&gt;Nginx-based Apt Caching Proxy&lt;/strong&gt; to act as a local &amp;ldquo;Update Accelerator.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Architecture&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configured our Nginx server configured as a reverse proxy for standard Debian/Ubuntu repositories.&lt;/li&gt;
&lt;li&gt;Configured the &lt;code&gt;apt&lt;/code&gt; sources on the client devices to point to this local proxy instead of the public internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Caching Logic&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;First Request:&lt;/strong&gt; The proxy fetches the package from the internet (e.g., &lt;code&gt;linux-headers-5.15.0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subsequent Requests:&lt;/strong&gt; The proxy serves the cached file from local disk storage to all other devices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache Expiry:&lt;/strong&gt; Configured strict caching rules to ensure critical security patches were always fresh while static binaries remained cached.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-expected-outcome"&gt;The Expected Outcome&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bandwidth Reduction:&lt;/strong&gt; External internet traffic for updates will drop by ~90% (1 download vs. hundreds).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Velocity:&lt;/strong&gt; Fleet-wide updates will complete in minutes, limited only by local LAN speed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stability:&lt;/strong&gt; Eliminates update timeouts and network congestion issues.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>