<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.thecandidstartup.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.thecandidstartup.org/" rel="alternate" type="text/html" /><updated>2026-06-15T09:31:46+00:00</updated><id>https://www.thecandidstartup.org/feed.xml</id><title type="html">The Candid Startup</title><subtitle>The Candid Startup Blog</subtitle><author><name>Tim Wiegand</name></author><entry><title type="html">InfiniSheet Structured Concurrency</title><link href="https://www.thecandidstartup.org/2026/05/11/infinisheet-structured-concurrency.html" rel="alternate" type="text/html" title="InfiniSheet Structured Concurrency" /><published>2026-05-11T00:00:00+00:00</published><updated>2026-05-11T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/05/11/infinisheet-structured-concurrency</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><summary type="html"><![CDATA[I’m putting my TypeScript Structured Concurrency sketch into practice on my InfiniSheet project. The first step is to flesh it out with real code for the crucial types and functions.]]></summary></entry><entry><title type="html">TypeScript Structured Concurrency</title><link href="https://www.thecandidstartup.org/2026/05/04/typescript-structured-concurrency.html" rel="alternate" type="text/html" title="TypeScript Structured Concurrency" /><published>2026-05-04T00:00:00+00:00</published><updated>2026-05-04T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/05/04/typescript-structured-concurrency</id><author><name>Tim Wiegand</name></author><category term="typescript" /><summary type="html"><![CDATA[Over time I’ve come to realize that there’s more to error-handling in concurrent programs than rejected promises or async Results. The code I’m writing is all a bit ad-hoc. Especially when it comes to async execution lifetimes.]]></summary></entry><entry><title type="html">Securing GitHub Actions</title><link href="https://www.thecandidstartup.org/2026/04/28/securing-github-actions.html" rel="alternate" type="text/html" title="Securing GitHub Actions" /><published>2026-04-28T00:00:00+00:00</published><updated>2026-04-28T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/04/28/securing-github-actions</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[The typical playbook for a supply chain attack is to use some form of social engineering to compromise a maintainer’s account, then use that account to directly publish compromised packages to npm. Maintainers are fighting back by removing direct publishing credentials and moving to trusted publishing pipelines like GitHub Actions. Consumers are protecting themselves by verifying package integrity and enforcing cooldowns before newly published packages can be consumed.]]></summary></entry><entry><title type="html">Multi-Tile Snapshots</title><link href="https://www.thecandidstartup.org/2026/04/20/infinisheet-multi-tile-snapshots.html" rel="alternate" type="text/html" title="Multi-Tile Snapshots" /><published>2026-04-20T00:00:00+00:00</published><updated>2026-04-20T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/04/20/infinisheet-multi-tile-snapshots</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[After some refactoring to decouple event log and snapshot loading, followed by many other distractions, I’m finally ready to implement multi-tile snapshots. This is the next step on my tracer bullet journey.]]></summary></entry><entry><title type="html">Updating Transitive Dependencies with pnpm</title><link href="https://www.thecandidstartup.org/2026/04/13/pnpm-update-transitive-dependency.html" rel="alternate" type="text/html" title="Updating Transitive Dependencies with pnpm" /><published>2026-04-13T00:00:00+00:00</published><updated>2026-04-13T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/04/13/pnpm-update-transitive-dependency</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="infinisheet" /><summary type="html"><![CDATA[Recently, I’ve been seeing a glut of dependabot security alerts for my Infinisheet project. I used to see a handful a month. At the start of this week, I was staring at twenty of them.]]></summary></entry><entry><title type="html">Heat Geek NanoStore DHW Update</title><link href="https://www.thecandidstartup.org/2026/04/07/heat-geek-nano-store-dhw-update.html" rel="alternate" type="text/html" title="Heat Geek NanoStore DHW Update" /><published>2026-04-07T00:00:00+00:00</published><updated>2026-04-07T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/04/07/heat-geek-nano-store-dhw-update</id><author><name>Tim Wiegand</name></author><category term="gear" /><category term="home-assistant" /><summary type="html"><![CDATA[Two months ago our prototype Heat Geek NanoStore was rebuilt. Everything looked rosy. All of my outstanding issues were resolved.]]></summary></entry><entry><title type="html">Unit Test Code Reuse with Vitest 4.1</title><link href="https://www.thecandidstartup.org/2026/03/30/unit-test-code-reuse.html" rel="alternate" type="text/html" title="Unit Test Code Reuse with Vitest 4.1" /><published>2026-03-30T00:00:00+00:00</published><updated>2026-03-30T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/03/30/unit-test-code-reuse</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I’m a strong believer in unit tests. I try to get close to 100% code coverage with my tests. Which means I have a lot of unit test code. Normally, you try to minimize duplication, and Don’t Repeat Yourself. That has it’s own special challenges when it comes to unit tests.]]></summary></entry><entry><title type="html">Asynchronous Unit Tests with Vitest</title><link href="https://www.thecandidstartup.org/2026/03/23/asynchronous-unit-tests-vitest.html" rel="alternate" type="text/html" title="Asynchronous Unit Tests with Vitest" /><published>2026-03-23T00:00:00+00:00</published><updated>2026-03-23T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/03/23/asynchronous-unit-tests-vitest</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="infinisheet" /><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[Asynchronous code is great. It’s the most efficient way to implement IO heavy workloads. When IO occurs, the current chain of execution is paused, allowing something else to run. There’s no multi-threading overhead. You can sustain far higher rates of effective concurrency while using only a single thread. Control is transferred at well defined points so there’s no need for critical sections and locks.]]></summary></entry><entry><title type="html">Decoupling Event Log and Snapshot Loading</title><link href="https://www.thecandidstartup.org/2026/03/09/infinisheet-decoupling-event-log-snapshot.html" rel="alternate" type="text/html" title="Decoupling Event Log and Snapshot Loading" /><published>2026-03-09T00:00:00+00:00</published><updated>2026-03-09T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/03/09/infinisheet-decoupling-event-log-snapshot</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[Last time, we got a load-on-demand chunked snapshot format working. It didn’t feel great, with too much coupling between in-memory representations for the event log and snapshot. We’re going to sort that out now before moving on to a multi-tile snapshot format.]]></summary></entry><entry><title type="html">Partially Loading Chunked Snapshots</title><link href="https://www.thecandidstartup.org/2026/03/02/infinisheet-snapshot-multi-part-partial-load.html" rel="alternate" type="text/html" title="Partially Loading Chunked Snapshots" /><published>2026-03-02T00:00:00+00:00</published><updated>2026-03-02T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/03/02/infinisheet-snapshot-multi-part-partial-load</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[We’re ready to start making our event sourced spreadsheet scalable. We have an existing unoptimized tracer bullet implementation that we can evolve, a high level plan for scalable snapshot data structures and a benchmark to track progress.]]></summary></entry><entry><title type="html">Securing my NPM Supply Chain</title><link href="https://www.thecandidstartup.org/2026/02/23/securing-npm-supply-chain.html" rel="alternate" type="text/html" title="Securing my NPM Supply Chain" /><published>2026-02-23T00:00:00+00:00</published><updated>2026-02-23T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/02/23/securing-npm-supply-chain</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[The news is full of npm supply chain attacks. I’ve previously described how package providers can use provenance and trusted publishing to help consumers verify that packages haven’t been tampered with.]]></summary></entry><entry><title type="html">InfiniSheet: Chore Updates</title><link href="https://www.thecandidstartup.org/2026/02/16/infinisheet-chore-updates.html" rel="alternate" type="text/html" title="InfiniSheet: Chore Updates" /><published>2026-02-16T00:00:00+00:00</published><updated>2026-02-16T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/02/16/infinisheet-chore-updates</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><summary type="html"><![CDATA[Six months ago I was spending all my time on Infinisheet, my event sourced spreadsheet project. Then I got distracted by Home Assistant, had a heat pump installed and had to debug a prototype hot water system.]]></summary></entry><entry><title type="html">Heat Geek NanoStore Conclusion</title><link href="https://www.thecandidstartup.org/2026/02/09/heat-geek-nano-store-conclusion.html" rel="alternate" type="text/html" title="Heat Geek NanoStore Conclusion" /><published>2026-02-09T00:00:00+00:00</published><updated>2026-02-09T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/02/09/heat-geek-nano-store-conclusion</id><author><name>Tim Wiegand</name></author><category term="gear" /><summary type="html"><![CDATA[Last time, I left you with a cliffhanger. I had a long list of issues with our prototype Heat Geek NanoStore, together with a plan to fix them all.]]></summary></entry><entry><title type="html">Heat Geek NanoStore Update</title><link href="https://www.thecandidstartup.org/2026/02/02/heat-geek-nano-store-update.html" rel="alternate" type="text/html" title="Heat Geek NanoStore Update" /><published>2026-02-02T00:00:00+00:00</published><updated>2026-02-02T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/02/02/heat-geek-nano-store-update</id><author><name>Tim Wiegand</name></author><category term="gear" /><summary type="html"><![CDATA[It’s been more than two months since my post about our prototype Heat Geek NanoStore. At the end of that post, we were waiting for a new diverting valve and extra insulation to be installed, while also looking ahead to colder weather.]]></summary></entry><entry><title type="html">Bootstrapping NPM Provenance with GitHub Actions</title><link href="https://www.thecandidstartup.org/2026/01/26/bootstrapping-npm-provenance-github-actions.html" rel="alternate" type="text/html" title="Bootstrapping NPM Provenance with GitHub Actions" /><published>2026-01-26T00:00:00+00:00</published><updated>2026-01-26T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/01/26/bootstrapping-npm-provenance-github-actions</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I’m putting my money where my mouth is. NPM provenance statements are great. Everyone should publish packages with a provenance statement. Including me.]]></summary></entry><entry><title type="html">Home Assistant: Resilient Battery Automation</title><link href="https://www.thecandidstartup.org/2026/01/19/home-assistant-resilient-battery-automation.html" rel="alternate" type="text/html" title="Home Assistant: Resilient Battery Automation" /><published>2026-01-19T00:00:00+00:00</published><updated>2026-01-19T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/01/19/home-assistant-resilient-battery-automation</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[It’s been a while since I investigated Home Assistant’s concurrency model. I was worried about contention between different automations manipulating the same resource. I came to the conclusion that all automations manipulating the same resource should be merged into one, using the composite automation pattern.]]></summary></entry><entry><title type="html">AWS Lambda Durable Functions</title><link href="https://www.thecandidstartup.org/2026/01/12/aws-lambda-durable-functions.html" rel="alternate" type="text/html" title="AWS Lambda Durable Functions" /><published>2026-01-12T00:00:00+00:00</published><updated>2026-01-12T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/01/12/aws-lambda-durable-functions</id><author><name>Tim Wiegand</name></author><category term="aws" /><summary type="html"><![CDATA[Lambda functions work best for short lived, compute intensive tasks. An individual Lambda invocation is limited to 15 minutes at most. You pay for the time the function is running, including when it’s waiting for IO to complete. If the function fails, you will need some external process that retries it later. Lambda Durable Functions address these weaknesses.]]></summary></entry><entry><title type="html">AWS re:Invent 2025</title><link href="https://www.thecandidstartup.org/2026/01/05/aws-reinvent-2025.html" rel="alternate" type="text/html" title="AWS re:Invent 2025" /><published>2026-01-05T00:00:00+00:00</published><updated>2026-01-05T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2026/01/05/aws-reinvent-2025</id><author><name>Tim Wiegand</name></author><category term="aws" /><summary type="html"><![CDATA[Once again, I spent the week after re:Invent gorging on YouTube videos at 1.5x speed. I’m using the same approach as last year to find more nuggets of gold and less corporate filler. That is, get a list of new announcements from the keynotes, then look for technical sessions on the interesting stuff. Finally, look for technical presentations from speakers I know are good.]]></summary></entry><entry><title type="html">Kia e-Niro 12V Battery Drain</title><link href="https://www.thecandidstartup.org/2025/12/15/kia-eniro-12v-battery-drain.html" rel="alternate" type="text/html" title="Kia e-Niro 12V Battery Drain" /><published>2025-12-15T00:00:00+00:00</published><updated>2025-12-15T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/12/15/kia-eniro-12v-battery-drain</id><author><name>Tim Wiegand</name></author><category term="gear" /><summary type="html"><![CDATA[We’ve had our Kia e-Niro EV for five years now. Early on, there were a couple of minor issues with the heater and collision avoidance radar which were sorted out under warranty. We had to replace the 12V battery two years ago. Apart from that, it’s been trouble free.]]></summary></entry><entry><title type="html">Heat Pump Cold Weather Performance</title><link href="https://www.thecandidstartup.org/2025/12/08/vaillant-heat-pump-cold-weather.html" rel="alternate" type="text/html" title="Heat Pump Cold Weather Performance" /><published>2025-12-08T00:00:00+00:00</published><updated>2025-12-08T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/12/08/vaillant-heat-pump-cold-weather</id><author><name>Tim Wiegand</name></author><category term="gear" /><category term="home-assistant" /><summary type="html"><![CDATA[We had a cold snap here in the UK. Over a few days, temperatures dropped from consistently over 10°C, to days at or below freezing. Perfect weather for dialing in a heat pump.]]></summary></entry><entry><title type="html">Home Assistant: Kiosk Mode and High Frequency Updates</title><link href="https://www.thecandidstartup.org/2025/11/24/home-assistant-kiosk-update-entity.html" rel="alternate" type="text/html" title="Home Assistant: Kiosk Mode and High Frequency Updates" /><published>2025-11-24T00:00:00+00:00</published><updated>2025-11-24T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/11/24/home-assistant-kiosk-update-entity</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[We recently had a Vaillant heat pump and Heat Geek NanoStore installed. The NanoStore contains a small amount of hot water which should be just enough to meet demand until the heat pump can kick in and ramp up to full power. Currently the hot water runs out after five minutes while the heat pump takes ten minutes to reach full power.]]></summary></entry><entry><title type="html">Heat Geek NanoStore</title><link href="https://www.thecandidstartup.org/2025/11/17/heat-geek-nano-store.html" rel="alternate" type="text/html" title="Heat Geek NanoStore" /><published>2025-11-17T00:00:00+00:00</published><updated>2025-11-17T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/11/17/heat-geek-nano-store</id><author><name>Tim Wiegand</name></author><category term="gear" /><summary type="html"><![CDATA[A few weeks ago I described our heat pump installation, which included a mystery hot water system. The mystery hot water system, as some of you already guessed, is a prototype Heat Geek NanoStore.]]></summary></entry><entry><title type="html">Open Energy Monitoring</title><link href="https://www.thecandidstartup.org/2025/11/10/open-energy-monitoring.html" rel="alternate" type="text/html" title="Open Energy Monitoring" /><published>2025-11-10T00:00:00+00:00</published><updated>2025-11-10T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/11/10/open-energy-monitoring</id><author><name>Tim Wiegand</name></author><category term="gear" /><category term="home-assistant" /><summary type="html"><![CDATA[I touched on Open Energy Monitoring briefly when talking about my heat pump install and Home Assistant integration. It’s worth a deeper dive.]]></summary></entry><entry><title type="html">Home Assistant Heat Pump: myVAILLANT, Emoncms and Met Office</title><link href="https://www.thecandidstartup.org/2025/11/03/home-assistant-heat-pump-myvaillant-emoncms-met-office.html" rel="alternate" type="text/html" title="Home Assistant Heat Pump: myVAILLANT, Emoncms and Met Office" /><published>2025-11-03T00:00:00+00:00</published><updated>2025-11-03T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/11/03/home-assistant-heat-pump-myvaillant-emoncms-met-office</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[Now that we have a heat pump up and running, the obvious next job is to get it hooked up to Home Assistant. Our heat pump is a Vaillant AroTHERM plus. A quick search of the Home Assistant Community Store turns up the myVAILLANT integration, which uses the same API as Vaillant’s myVAILLANT app.]]></summary></entry><entry><title type="html">Vaillant aroTHERM plus 7kW Air Source Heat Pump</title><link href="https://www.thecandidstartup.org/2025/10/27/vaillant_arotherm_heat_pump.html" rel="alternate" type="text/html" title="Vaillant aroTHERM plus 7kW Air Source Heat Pump" /><published>2025-10-27T00:00:00+00:00</published><updated>2025-10-27T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/10/27/vaillant_arotherm_heat_pump</id><author><name>Tim Wiegand</name></author><category term="gear" /><summary type="html"><![CDATA[Like many houses in the UK, we rely on a gas combi boiler for heating and hot water. I know that continuing to burn gas is not sustainable in the long term. However, I couldn’t see the point in switching while the grid is still burning gas to generate electricity.]]></summary></entry><entry><title type="html">Home Assistant: Concurrency Model</title><link href="https://www.thecandidstartup.org/2025/10/20/home-assistant-concurrency-model.html" rel="alternate" type="text/html" title="Home Assistant: Concurrency Model" /><published>2025-10-20T00:00:00+00:00</published><updated>2025-10-20T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/10/20/home-assistant-concurrency-model</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[I like to think of myself as a computer scientist. I want to know how things work. Then I want to understand why they work that way.]]></summary></entry><entry><title type="html">Home Assistant: Hypervolt Resilience, Configuration and Backups</title><link href="https://www.thecandidstartup.org/2025/10/13/home-assistant-hypervolt-resilience-configuration-backups.html" rel="alternate" type="text/html" title="Home Assistant: Hypervolt Resilience, Configuration and Backups" /><published>2025-10-13T00:00:00+00:00</published><updated>2025-10-13T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/10/13/home-assistant-hypervolt-resilience-configuration-backups</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[The Hypervolt EV charger integration is an important dependency for the automations and dashboards that I’m running on Home Assistant. Now that I’m a few weeks in, I’ve noticed some edge cases where things are just not right.]]></summary></entry><entry><title type="html">Home Assistant: Octopus, Repairs and Blueprints</title><link href="https://www.thecandidstartup.org/2025/10/06/home-assistant-octopus-repair-blueprint.html" rel="alternate" type="text/html" title="Home Assistant: Octopus, Repairs and Blueprints" /><published>2025-10-06T00:00:00+00:00</published><updated>2025-10-06T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/10/06/home-assistant-octopus-repair-blueprint</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[Last time, we touched briefly on how to extract electricity meter readings from the Home Assistant Octopus Energy integration. I think it’s worth doing a deeper dive.]]></summary></entry><entry><title type="html">Home Assistant: Dashboards, Statistics and Custom Cards</title><link href="https://www.thecandidstartup.org/2025/09/29/home-assistant-dashboard-custom-cards-statistics.html" rel="alternate" type="text/html" title="Home Assistant: Dashboards, Statistics and Custom Cards" /><published>2025-09-29T00:00:00+00:00</published><updated>2025-09-29T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/09/29/home-assistant-dashboard-custom-cards-statistics</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[I now have useful data being collected and displayed on the Home Assistant built-in energy dashboard. Of course, it’s not being presented exactly as I would like and doesn’t include all the data sources I’d like. Time to dive into the wonderful world of custom dashboards.]]></summary></entry><entry><title type="html">Home Assistant: Integrals and Utility Meters</title><link href="https://www.thecandidstartup.org/2025/09/22/home-assistant-integral-utility-meter.html" rel="alternate" type="text/html" title="Home Assistant: Integrals and Utility Meters" /><published>2025-09-22T00:00:00+00:00</published><updated>2025-09-22T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/09/22/home-assistant-integral-utility-meter</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[I’m finding the Home Assistant Energy Dashboard to be pretty but not very useful. The main problem is that the data is very coarse grained. The dashboard is driven by Home Assistant’s statistics system and requires metered entities. That is, sensors that track total amounts of energy (kWh), that increase over time.]]></summary></entry><entry><title type="html">Home Assistant: Helpers, Templates and Solar Forecasts</title><link href="https://www.thecandidstartup.org/2025/09/15/home-assistant-helpers-template-solar-forecasts.html" rel="alternate" type="text/html" title="Home Assistant: Helpers, Templates and Solar Forecasts" /><published>2025-09-15T00:00:00+00:00</published><updated>2025-09-15T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/09/15/home-assistant-helpers-template-solar-forecasts</id><author><name>Tim Wiegand</name></author><category term="home-assistant" /><summary type="html"><![CDATA[Last time, I took you through setting up a Home Assistant Green, installing HACS, adding custom integrations and then creating an automation to disable discharge of my home battery while my EV is charging.]]></summary></entry><entry><title type="html">Rewriting History</title><link href="https://www.thecandidstartup.org/2025/09/08/rewriting-history.html" rel="alternate" type="text/html" title="Rewriting History" /><published>2025-09-08T00:00:00+00:00</published><updated>2025-09-08T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/09/08/rewriting-history</id><author><name>Tim Wiegand</name></author><category term="blog" /><summary type="html"><![CDATA[This is a blog, not a set of living documents. Each post is a moment in time. However, time passes, and sometimes you find things that are wrong in an old post.]]></summary></entry><entry><title type="html">Vitest 3 Monorepo Setup</title><link href="https://www.thecandidstartup.org/2025/09/08/vitest-3-monorepo-setup.html" rel="alternate" type="text/html" title="Vitest 3 Monorepo Setup" /><published>2025-09-08T00:00:00+00:00</published><updated>2025-09-08T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/09/08/vitest-3-monorepo-setup</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I was about to get started turning my stub react-spreadsheet package into a real one, when I noticed a new Vitest related warning from VS Code.]]></summary></entry><entry><title type="html">Home Assistant</title><link href="https://www.thecandidstartup.org/2025/09/01/home-assistant.html" rel="alternate" type="text/html" title="Home Assistant" /><published>2025-09-01T00:00:00+00:00</published><updated>2025-09-01T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/09/01/home-assistant</id><author><name>Tim Wiegand</name></author><category term="gear" /><category term="home-assistant" /><summary type="html"><![CDATA[Home Assistant has been on my radar for a while. I’ve always liked the idea of having a small local server running 24x7 that I could use to “automate stuff”. Two things put me off doing anything about it. There was low level anxiety over picking the right hardware and OS to run it on, but more importantly there was the lack of anything that really needed automating.]]></summary></entry><entry><title type="html">Snapshot Benchmarking with Vitest</title><link href="https://www.thecandidstartup.org/2025/08/25/snapshot-benchmarking.html" rel="alternate" type="text/html" title="Snapshot Benchmarking with Vitest" /><published>2025-08-25T00:00:00+00:00</published><updated>2025-08-25T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/08/25/snapshot-benchmarking</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><category term="frontend" /><summary type="html"><![CDATA[The framework for our event sourced spreadsheet is in place. Entries are being written to the log, snapshots are created at regular intervals, clients start by reading the most recent snapshot and then following along as the log is updated. All this has been done tracer bullet style, with simple code that is largely unoptimized and not scalable.]]></summary></entry><entry><title type="html">Snapshot Completion</title><link href="https://www.thecandidstartup.org/2025/08/18/infinisheet-snapshot-completion.html" rel="alternate" type="text/html" title="Snapshot Completion" /><published>2025-08-18T00:00:00+00:00</published><updated>2025-08-18T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/08/18/infinisheet-snapshot-completion</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[We don’t yet handle the case where a snapshot completes when a client is already up and running. The snapshot could have completed because this client triggered it, or another client did. How can clients find out that a snapshot workflow has completed? They’ll pick up the new snapshot when they start up, but a long running client could end up with a huge log segment unless there’s some kind of explicit notification.]]></summary></entry><entry><title type="html">Tracer Bullet Snapshots</title><link href="https://www.thecandidstartup.org/2025/08/11/infinisheet-tracer-bullet-snapshots.html" rel="alternate" type="text/html" title="Tracer Bullet Snapshots" /><published>2025-08-11T00:00:00+00:00</published><updated>2025-08-11T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/08/11/infinisheet-tracer-bullet-snapshots</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[It’s finally time to create snapshots as my event sourced spreadsheet’s event log grows. It seemed like I was never going to get here. There’s a laundry list of pre-work that I needed to complete first.]]></summary></entry><entry><title type="html">Infinisheet Cell Map</title><link href="https://www.thecandidstartup.org/2025/08/04/infinisheet-cell-map.html" rel="alternate" type="text/html" title="Infinisheet Cell Map" /><published>2025-08-04T00:00:00+00:00</published><updated>2025-08-04T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/08/04/infinisheet-cell-map</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[I have all the bits of infrastructure needed to start saving snapshots of my event sourced spreadsheet. The source of truth for the spreadsheet content is in an event log. I’ve defined a Blob Store interface to serialize snapshots as blobs of data together with a Workers interface to create snapshots as a background task.]]></summary></entry><entry><title type="html">Wiring up the Blob Store and Workers</title><link href="https://www.thecandidstartup.org/2025/07/21/infinisheet-wiring-blob-store-workers.html" rel="alternate" type="text/html" title="Wiring up the Blob Store and Workers" /><published>2025-07-21T00:00:00+00:00</published><updated>2025-07-21T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/07/21/infinisheet-wiring-blob-store-workers</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><summary type="html"><![CDATA[Now that I have interfaces and reference implementations for a Blob Store and Workers, we can try to wire them up to our tracer bullet prototype.]]></summary></entry><entry><title type="html">InfiniSheet Workers</title><link href="https://www.thecandidstartup.org/2025/07/14/infinisheet-workers.html" rel="alternate" type="text/html" title="InfiniSheet Workers" /><published>2025-07-14T00:00:00+00:00</published><updated>2025-07-14T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/07/14/infinisheet-workers</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><summary type="html"><![CDATA[I’m building an event sourced spreadsheet on a foundation of an event log, a blob store and background workers. I’ve defined EventLog and BlobStore interfaces with reference implementations. Now it’s the turn of background workers.]]></summary></entry><entry><title type="html">InfiniSheet Blob Store</title><link href="https://www.thecandidstartup.org/2025/07/07/infinisheet-blob-store.html" rel="alternate" type="text/html" title="InfiniSheet Blob Store" /><published>2025-07-07T00:00:00+00:00</published><updated>2025-07-07T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/07/07/infinisheet-blob-store</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><summary type="html"><![CDATA[We left our scalable cloud spreadsheet project in a good place. We used tracer bullet development and after a few iterations got an end to end simulation running against a reference implementation of an event log.]]></summary></entry><entry><title type="html">Unit Test Code Reuse with Vitest</title><link href="https://www.thecandidstartup.org/2025/06/30/unit-test-code-reuse.html" rel="alternate" type="text/html" title="Unit Test Code Reuse with Vitest" /><published>2025-06-30T00:00:00+00:00</published><updated>2025-06-30T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/06/30/unit-test-code-reuse</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I’m a strong believer in unit tests. I try to get close to 100% code coverage with my tests. Which means I have a lot of unit test code. Normally, you try to minimize duplication, and Don’t Repeat Yourself. That has it’s own special challenges when it comes to unit tests.]]></summary></entry><entry><title type="html">React Spreadsheet: Optimistic Update</title><link href="https://www.thecandidstartup.org/2025/06/23/react-spreadsheet-optimistic-update.html" rel="alternate" type="text/html" title="React Spreadsheet: Optimistic Update" /><published>2025-06-23T00:00:00+00:00</published><updated>2025-06-23T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/06/23/react-spreadsheet-optimistic-update</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[I recently made my spreadsheet data interface more explicitly asynchronous. I naively updated VirtualSpreadsheet to use the newly asynchronous setCellValueAndFormat API. After discovering that the user experience was horrible if there was any latency, I did a deep dive into best practice for handling asynchronous updates in React.]]></summary></entry><entry><title type="html">Asynchronous React</title><link href="https://www.thecandidstartup.org/2025/06/16/asynchronous-react.html" rel="alternate" type="text/html" title="Asynchronous React" /><published>2025-06-16T00:00:00+00:00</published><updated>2025-06-16T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/06/16/asynchronous-react</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[Last time, I naively updated my spreadsheet frontend component to use an asynchronous update API. Everything looked like it was working, until I added some latency to the API’s response. The resulting user experience was terrible.]]></summary></entry><entry><title type="html">Asynchronous Spreadsheet Data</title><link href="https://www.thecandidstartup.org/2025/06/09/asynchronous-spreadsheet-data.html" rel="alternate" type="text/html" title="Asynchronous Spreadsheet Data" /><published>2025-06-09T00:00:00+00:00</published><updated>2025-06-09T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/06/09/asynchronous-spreadsheet-data</id><author><name>Tim Wiegand</name></author><category term="event-sourced-spreadsheet-data" /><category term="react-spreadsheet" /><summary type="html"><![CDATA[Last week’s tracer bullet development showed that I needed to make my SpreadsheetData interface more explicitly asynchronous.]]></summary></entry><entry><title type="html">Event Sourced Spreadsheet Data</title><link href="https://www.thecandidstartup.org/2025/06/02/event-sourced-spreadsheet-data.html" rel="alternate" type="text/html" title="Event Sourced Spreadsheet Data" /><published>2025-06-02T00:00:00+00:00</published><updated>2025-06-02T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/06/02/event-sourced-spreadsheet-data</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><category term="event-sourced-spreadsheet-data" /><category term="react-spreadsheet" /><summary type="html"><![CDATA[I’ve been working on my scalable spreadsheet project from opposite ends. So far, most of my focus has been on the front end. I’ve created a virtualized React spreadsheet component that can scale to trillions of rows and columns. The component accesses spreadsheet data via a SpreadsheetData interface based on React’s external store interface.]]></summary></entry><entry><title type="html">Asynchronous Event Log</title><link href="https://www.thecandidstartup.org/2025/05/26/asynchronous-event-log.html" rel="alternate" type="text/html" title="Asynchronous Event Log" /><published>2025-05-26T00:00:00+00:00</published><updated>2025-05-26T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/05/26/asynchronous-event-log</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><summary type="html"><![CDATA[I’ve created an event log interface and reference implementation. The interface exposes all the functionality I’ll need with a minimal API. There’s enough of an abstraction layer that it should allow for multiple real implementations.]]></summary></entry><entry><title type="html">Asynchronous TypeScript</title><link href="https://www.thecandidstartup.org/2025/05/19/asynchronous-typescript.html" rel="alternate" type="text/html" title="Asynchronous TypeScript" /><published>2025-05-19T00:00:00+00:00</published><updated>2025-05-19T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/05/19/asynchronous-typescript</id><author><name>Tim Wiegand</name></author><category term="typescript" /><summary type="html"><![CDATA[One of my reasons for choosing TypeScript as a language stack is that it’s built on an asynchronous IO, event-driven programming model, from the ground up. On the server side, idiomatic NodeJS code scales surprisingly well for a dynamic, low ceremony, fast development stack.]]></summary></entry><entry><title type="html">InfiniSheet Event Log</title><link href="https://www.thecandidstartup.org/2025/05/05/infinisheet-event-log.html" rel="alternate" type="text/html" title="InfiniSheet Event Log" /><published>2025-05-05T00:00:00+00:00</published><updated>2025-05-05T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/05/05/infinisheet-event-log</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><summary type="html"><![CDATA[So far, my scalable spreadsheet implementation has concentrated entirely on the frontend. Time to start looking at the backend, starting with the persistence model.]]></summary></entry><entry><title type="html">React Spreadsheet: Error Handling</title><link href="https://www.thecandidstartup.org/2025/04/28/react-spreadsheet-error-handling.html" rel="alternate" type="text/html" title="React Spreadsheet: Error Handling" /><published>2025-04-28T00:00:00+00:00</published><updated>2025-04-28T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/04/28/react-spreadsheet-error-handling</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[Last time, we integrated NeverThrow into InfiniSheet to add Result&lt;T,E&gt; types for Rust style error handling.]]></summary></entry><entry><title type="html">InfiniSheet Error Handling</title><link href="https://www.thecandidstartup.org/2025/04/22/infinisheet-error-handling.html" rel="alternate" type="text/html" title="InfiniSheet Error Handling" /><published>2025-04-22T00:00:00+00:00</published><updated>2025-04-22T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/04/22/infinisheet-error-handling</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><category term="react-spreadsheet" /><summary type="html"><![CDATA[Last time, we looked at general options for error handling in TypeScript. I liked Rust style Result&lt;T,E&gt; types.]]></summary></entry><entry><title type="html">TypeScript Error Handling</title><link href="https://www.thecandidstartup.org/2025/04/14/typescript-error-handling.html" rel="alternate" type="text/html" title="TypeScript Error Handling" /><published>2025-04-14T00:00:00+00:00</published><updated>2025-04-14T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/04/14/typescript-error-handling</id><author><name>Tim Wiegand</name></author><category term="typescript" /><summary type="html"><![CDATA[All real world code needs error handling. Like any common concern, code is easier to understand and maintain if you have a consistent approach.]]></summary></entry><entry><title type="html">TypeScript Semantic Versioning</title><link href="https://www.thecandidstartup.org/2025/04/07/typescript-semantic-versioning.html" rel="alternate" type="text/html" title="TypeScript Semantic Versioning" /><published>2025-04-07T00:00:00+00:00</published><updated>2025-04-07T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/04/07/typescript-semantic-versioning</id><author><name>Tim Wiegand</name></author><category term="typescript" /><summary type="html"><![CDATA[The JavaScript npm ecosystem is built on the foundation of semantic versioning. Without semantic versioning, how could you possibly manage upgrades to the hundreds of dependencies accumulated by any real world project?]]></summary></entry><entry><title type="html">Upgrading to Vitest 3, Vite 6 and React 19</title><link href="https://www.thecandidstartup.org/2025/03/31/vitest-3-vite-6-react-19.html" rel="alternate" type="text/html" title="Upgrading to Vitest 3, Vite 6 and React 19" /><published>2025-03-31T00:00:00+00:00</published><updated>2025-03-31T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/03/31/vitest-3-vite-6-react-19</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="infinisheet" /><summary type="html"><![CDATA[There are three big outstanding updates that have been hanging over me for a while. React 19, Vite 6 and Vitest 3. Vite and Vitest are at the heart of my development process. React is the dependency for my front-end packages. Understandably, I’m nervous given my experience the last time I did a round of major updates.]]></summary></entry><entry><title type="html">React Spreadsheet: Layered Data</title><link href="https://www.thecandidstartup.org/2025/03/17/react-spreadsheet-layered-data.html" rel="alternate" type="text/html" title="React Spreadsheet: Layered Data" /><published>2025-03-17T00:00:00+00:00</published><updated>2025-03-17T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/03/17/react-spreadsheet-layered-data</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><category term="typescript" /><summary type="html"><![CDATA[Last time, I created a reference implementation of the SpreadsheetData interface, including support for editing. Connect it to my VirtualSpreadsheet front end, and boom, you have an editable empty spreadsheet.]]></summary></entry><entry><title type="html">React Spreadsheet: Editable Data</title><link href="https://www.thecandidstartup.org/2025/03/10/react-spreadsheet-editable-data.html" rel="alternate" type="text/html" title="React Spreadsheet: Editable Data" /><published>2025-03-10T00:00:00+00:00</published><updated>2025-03-10T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/03/10/react-spreadsheet-editable-data</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><category term="infinisheet" /><summary type="html"><![CDATA[We’re on a roll, steadily filling out the Infinisheet architecture diagram with actual implementations. I’ve created a React based spreadsheet frontend that reads data via a common spreadsheet data interface.]]></summary></entry><entry><title type="html">React Spreadsheet: Release Ready</title><link href="https://www.thecandidstartup.org/2025/03/03/react-spreadsheet-release-ready.html" rel="alternate" type="text/html" title="React Spreadsheet: Release Ready" /><published>2025-03-03T00:00:00+00:00</published><updated>2025-03-03T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/03/03/react-spreadsheet-release-ready</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[Last time, I left you with a laundry list of things to do next. In the end, I decided to try and do all of them, with the unifying theme of getting react-spreadsheet ready to release.]]></summary></entry><entry><title type="html">Publishing the InfiniSheet Storybook</title><link href="https://www.thecandidstartup.org/2025/02/24/publishing-infinisheet-storybook.html" rel="alternate" type="text/html" title="Publishing the InfiniSheet Storybook" /><published>2025-02-24T00:00:00+00:00</published><updated>2025-02-24T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/02/24/publishing-infinisheet-storybook</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="blog" /><category term="infinisheet" /><summary type="html"><![CDATA[I finally have a storybook that I’m happy to publish. Now I just have to figure out how to get it onto thecandidstartup.org and tie it into the website navigation structure, as well as the existing Typedoc API documentation.]]></summary></entry><entry><title type="html">Hacking TSDoc support into Storybook</title><link href="https://www.thecandidstartup.org/2025/02/17/hacking-storybook-tsdoc.html" rel="alternate" type="text/html" title="Hacking TSDoc support into Storybook" /><published>2025-02-17T00:00:00+00:00</published><updated>2025-02-17T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/02/17/hacking-storybook-tsdoc</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[Last time, I put together a storybook for my InfiniSheet project. There was one outstanding issue.]]></summary></entry><entry><title type="html">Building the InfiniSheet Storybook</title><link href="https://www.thecandidstartup.org/2025/02/10/building-infinisheet-storybook.html" rel="alternate" type="text/html" title="Building the InfiniSheet Storybook" /><published>2025-02-10T00:00:00+00:00</published><updated>2025-02-10T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/02/10/building-infinisheet-storybook</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="infinisheet" /><summary type="html"><![CDATA[Now that I have Storybook bootstrapped, I’m going through all my InfiniSheet components creating stories. The process is mostly really straightforward. However, I am finding cases where I need to use additional Storybook features.]]></summary></entry><entry><title type="html">React Spreadsheet: Edit Ready</title><link href="https://www.thecandidstartup.org/2025/02/03/react-spreadsheet-edit-ready.html" rel="alternate" type="text/html" title="React Spreadsheet: Edit Ready" /><published>2025-02-03T00:00:00+00:00</published><updated>2025-02-03T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/02/03/react-spreadsheet-edit-ready</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[It’s been a couple of months since I last worked on features for my scalable React spreadsheet component. I got distracted by adding Playwright and Storybook to my arsenal of development tools. The next step is to add all my components to Storybook and publish it as part of my documentation set.]]></summary></entry><entry><title type="html">Now on Bluesky</title><link href="https://www.thecandidstartup.org/2025/01/27/bluesky.html" rel="alternate" type="text/html" title="Now on Bluesky" /><published>2025-01-27T00:00:00+00:00</published><updated>2025-01-27T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/01/27/bluesky</id><author><name>Tim Wiegand</name></author><category term="blog" /><summary type="html"><![CDATA[I have an account on Bluesky now. As with Twitter (currently known as X) and LinkedIn, I’ll post links to blog articles as they come out.]]></summary></entry><entry><title type="html">Typecheck All The Things</title><link href="https://www.thecandidstartup.org/2025/01/20/typecheck-all-the-things.html" rel="alternate" type="text/html" title="Typecheck All The Things" /><published>2025-01-20T00:00:00+00:00</published><updated>2025-01-20T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/01/20/typecheck-all-the-things</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="typescript" /><summary type="html"><![CDATA[Something weird happened the other day. I opened up one of my unit tests in VS Code to refresh my memory on how a component worked. VS Code reported that the test file had four TypeScript errors. I checked another unit test. That had errors too.]]></summary></entry><entry><title type="html">Bootstrapping Storybook</title><link href="https://www.thecandidstartup.org/2025/01/13/bootstrapping-storybook.html" rel="alternate" type="text/html" title="Bootstrapping Storybook" /><published>2025-01-13T00:00:00+00:00</published><updated>2025-01-13T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/01/13/bootstrapping-storybook</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[Last time, we had a look at Vitest browser mode and Playwright component testing. I was looking for a tool to help with component and integration testing of my React components.]]></summary></entry><entry><title type="html">Component Testing with Playwright and Vitest</title><link href="https://www.thecandidstartup.org/2025/01/06/component-test-playwright-vitest.html" rel="alternate" type="text/html" title="Component Testing with Playwright and Vitest" /><published>2025-01-06T00:00:00+00:00</published><updated>2025-01-06T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2025/01/06/component-test-playwright-vitest</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[Last time we added Playwright to our toolbox for end to end testing. We already had Vitest for unit tests. Now we need to decide on a solution for integration and component testing.]]></summary></entry><entry><title type="html">AWS re:Invent 2024</title><link href="https://www.thecandidstartup.org/2024/12/20/aws-reinvent-2024.html" rel="alternate" type="text/html" title="AWS re:Invent 2024" /><published>2024-12-20T00:00:00+00:00</published><updated>2024-12-20T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/12/20/aws-reinvent-2024</id><author><name>Tim Wiegand</name></author><category term="aws" /><summary type="html"><![CDATA[As ever I’m spending the week after re:Invent gorging on YouTube videos at 1.5x speed. This year I’m trying to use my time as efficiently as possible. I want to find more nuggets of gold and less corporate filler.]]></summary></entry><entry><title type="html">Bootstrapping Playwright</title><link href="https://www.thecandidstartup.org/2024/12/16/bootstrapping-playwright.html" rel="alternate" type="text/html" title="Bootstrapping Playwright" /><published>2024-12-16T00:00:00+00:00</published><updated>2024-12-16T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/12/16/bootstrapping-playwright</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I’m ready to add browser based automated testing to my InfiniSheet project. Before we get into the details of getting my chosen tool up and running, let’s have a quick reminder of why we need it.]]></summary></entry><entry><title type="html">InfiniSheet: Chore Updates</title><link href="https://www.thecandidstartup.org/2024/12/09/infinisheet-chore-updates.html" rel="alternate" type="text/html" title="InfiniSheet: Chore Updates" /><published>2024-12-09T00:00:00+00:00</published><updated>2024-12-09T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/12/09/infinisheet-chore-updates</id><author><name>Tim Wiegand</name></author><category term="infinisheet" /><category term="typescript" /><summary type="html"><![CDATA[Last time, I decided that I needed some additional tools for browser based automated testing. Before I can do that, I should really make sure all my existing dependencies are up to date.]]></summary></entry><entry><title type="html">React Virtual Scroll : State Considered Harmful</title><link href="https://www.thecandidstartup.org/2024/12/02/react-virtual-scroll-state-harmful.html" rel="alternate" type="text/html" title="React Virtual Scroll : State Considered Harmful" /><published>2024-12-02T00:00:00+00:00</published><updated>2024-12-02T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/12/02/react-virtual-scroll-state-harmful</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[Last time, I was tearing my hair out because I’d broken the core paged virtual scrolling functionality in the big 0.6.0 update.]]></summary></entry><entry><title type="html">React Spreadsheet: Decoupled Rendering</title><link href="https://www.thecandidstartup.org/2024/11/25/react-spreadsheet-decoupled-rendering.html" rel="alternate" type="text/html" title="React Spreadsheet: Decoupled Rendering" /><published>2024-11-25T00:00:00+00:00</published><updated>2024-11-25T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/11/25/react-spreadsheet-decoupled-rendering</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[I rebuilt my react-virtual-scroll package from the ground up. I couldn’t make traditional virtual scrolling work properly with the new React 18 rendering API or Chrome’s GPU accelerated compositor. So I switched to an approach that decoupled rendering of a window onto a virtualized grid from scrolling it.]]></summary></entry><entry><title type="html">React Virtual Scroll 0.6.x : Consciously Uncoupling</title><link href="https://www.thecandidstartup.org/2024/11/18/react-virtual-scroll-0-6-x.html" rel="alternate" type="text/html" title="React Virtual Scroll 0.6.x : Consciously Uncoupling" /><published>2024-11-18T00:00:00+00:00</published><updated>2024-11-18T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/11/18/react-virtual-scroll-0-6-x</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[As we discovered last time, traditional virtual scrolling implementations don’t work properly. Both React and the Chrome browser prioritize responsiveness when scrolling. New frames can be displayed before virtualized components have a chance to render updated content. Content appears torn or goes blank.]]></summary></entry><entry><title type="html">React Glitchy Virtual Scroll: Deep Dive</title><link href="https://www.thecandidstartup.org/2024/11/11/react-glitchy-virtual-scroll.html" rel="alternate" type="text/html" title="React Glitchy Virtual Scroll: Deep Dive" /><published>2024-11-11T00:00:00+00:00</published><updated>2024-11-11T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/11/11/react-glitchy-virtual-scroll</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[How can this be happening? I’m doing everything in my power to ensure that the visible content in my virtualized components is rendered before the browser paints. I’m using the legacy React render method which ensures that the DOM is updated immediately when an event is handled. I’ve restructured my spreadsheet component to ensure that everything is rendered before React returns to the event loop.]]></summary></entry><entry><title type="html">React Virtual Scroll : Scroll Options and Display List</title><link href="https://www.thecandidstartup.org/2024/11/04/react-virtual-scroll-options-display-list.html" rel="alternate" type="text/html" title="React Virtual Scroll : Scroll Options and Display List" /><published>2024-11-04T00:00:00+00:00</published><updated>2024-11-04T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/11/04/react-virtual-scroll-options-display-list</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[It’s time for more enhancements to react-virtual-scroll driven by requirements from react-spreadsheet. If that seems a bit dull, don’t worry, things get wild by the time we reach the end.]]></summary></entry><entry><title type="html">React Spreadsheet: Event Handling</title><link href="https://www.thecandidstartup.org/2024/10/28/react-spreadsheet-event-handling.html" rel="alternate" type="text/html" title="React Spreadsheet: Event Handling" /><published>2024-10-28T00:00:00+00:00</published><updated>2024-10-28T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/10/28/react-spreadsheet-event-handling</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[Last time we got basic selection with a focus cell working. The only way of selecting something is by typing a cell reference into an input box.]]></summary></entry><entry><title type="html">React Virtual Scroll 0.5.0 : Render Props</title><link href="https://www.thecandidstartup.org/2024/10/21/react-virtual-scroll-0-5-0.html" rel="alternate" type="text/html" title="React Virtual Scroll 0.5.0 : Render Props" /><published>2024-10-21T00:00:00+00:00</published><updated>2024-10-21T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/10/21/react-virtual-scroll-0-5-0</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[The 0.4.0 release of react-virtual-scroll focused on customization. Since then, I’ve learnt a lot from using VirtualGrid and VirtualList as building blocks for my react-spreadsheet package. In particular, I learnt that the custom container component props introduced in 0.4.0 aren’t a good fit with modern React.]]></summary></entry><entry><title type="html">React Spreadsheet: Selection and Focus</title><link href="https://www.thecandidstartup.org/2024/10/14/react-spreadsheet-selection-focus.html" rel="alternate" type="text/html" title="React Spreadsheet: Selection and Focus" /><published>2024-10-14T00:00:00+00:00</published><updated>2024-10-14T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/10/14/react-spreadsheet-selection-focus</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[I’m about to add support for editing data in my React spreadsheet component. Before I can do that, I need to be able to select the cell I want to edit. Before I can do that, I need to add some grid lines to make it easier to see where the cell boundaries are.]]></summary></entry><entry><title type="html">Spreadsheet Data Model</title><link href="https://www.thecandidstartup.org/2024/10/07/react-spreadsheet-data-model.html" rel="alternate" type="text/html" title="Spreadsheet Data Model" /><published>2024-10-07T00:00:00+00:00</published><updated>2024-10-07T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/10/07/react-spreadsheet-data-model</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><category term="spreadsheets" /><summary type="html"><![CDATA[Last time, we defined a minimal data interface and hooked it up to VirtualSpreadsheet. Now I need to get a better understanding of the standard spreadsheet data model so that I can flesh out the interface to match.]]></summary></entry><entry><title type="html">Spreadsheet Data Interface</title><link href="https://www.thecandidstartup.org/2024/09/30/react-spreadsheet-data-interface.html" rel="alternate" type="text/html" title="Spreadsheet Data Interface" /><published>2024-09-30T00:00:00+00:00</published><updated>2024-09-30T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/09/30/react-spreadsheet-data-interface</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><category term="typescript" /><summary type="html"><![CDATA[Last time, I got fed up with the hardcoded placeholder content in my react-spreadsheet component. Time to make a start on the spreadsheet data interface that my component will use to retrieve content for display.]]></summary></entry><entry><title type="html">Spreadsheet Column Naming</title><link href="https://www.thecandidstartup.org/2024/09/16/react-spreadsheet-column-name.html" rel="alternate" type="text/html" title="Spreadsheet Column Naming" /><published>2024-09-16T00:00:00+00:00</published><updated>2024-09-16T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/09/16/react-spreadsheet-column-name</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><category term="spreadsheets" /><summary type="html"><![CDATA[Last time, I ported some spreadsheet-ish sample code into my new stub react-spreadsheet package, and called it a spreadsheet. Unsurprisingly, it’s not very good. Time to start iterating.]]></summary></entry><entry><title type="html">React Spreadsheet Infinite Scrolling</title><link href="https://www.thecandidstartup.org/2024/09/16/react-spreadsheet-infinite-scrolling.html" rel="alternate" type="text/html" title="React Spreadsheet Infinite Scrolling" /><published>2024-09-16T00:00:00+00:00</published><updated>2024-09-16T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/09/16/react-spreadsheet-infinite-scrolling</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[Last time, I left you feeling rather constrained by my starting spreadsheet size of 100 rows and 26 columns. This is the same starting size as Google Sheets. Like Google Sheets, I could have explicit buttons that add additional rows and columns. However, I don’t like that behavior. The UI acts as if rows and columns were precious, giving them out begrudgingly.]]></summary></entry><entry><title type="html">Introducing React Spreadsheet</title><link href="https://www.thecandidstartup.org/2024/09/09/react-spreadsheet.html" rel="alternate" type="text/html" title="Introducing React Spreadsheet" /><published>2024-09-09T00:00:00+00:00</published><updated>2024-09-09T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/09/09/react-spreadsheet</id><author><name>Tim Wiegand</name></author><category term="react-spreadsheet" /><summary type="html"><![CDATA[I seem to have spent the past few weeks repeatedly finding reasons not to get my react-spreadsheet package off the ground. That changes today. First, a quick reminder of the big picture.]]></summary></entry><entry><title type="html">One Hundred Posts</title><link href="https://www.thecandidstartup.org/2024/09/02/one-hundred-posts.html" rel="alternate" type="text/html" title="One Hundred Posts" /><published>2024-09-02T00:00:00+00:00</published><updated>2024-09-02T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/09/02/one-hundred-posts</id><author><name>Tim Wiegand</name></author><category term="blog" /><summary type="html"><![CDATA[This is my hundredth post to the Candid Startup. As this is a special celebration, make sure you stick around until the end for an amazing free giveaway.]]></summary></entry><entry><title type="html">Styling React Components with CSS</title><link href="https://www.thecandidstartup.org/2024/08/26/css-react-components.html" rel="alternate" type="text/html" title="Styling React Components with CSS" /><published>2024-08-26T00:00:00+00:00</published><updated>2024-08-26T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/08/26/css-react-components</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I had just started turning my stub react-spreadsheet package into a real one, when I ran into a dilemma. What was I going to do about styling my new spreadsheet component?]]></summary></entry><entry><title type="html">Vitest Monorepo Setup</title><link href="https://www.thecandidstartup.org/2024/08/19/vitest-monorepo-setup.html" rel="alternate" type="text/html" title="Vitest Monorepo Setup" /><published>2024-08-19T00:00:00+00:00</published><updated>2024-08-19T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/08/19/vitest-monorepo-setup</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I was about to get started turning my stub react-spreadsheet package into a real one, when I noticed a new Vitest related warning from VS Code.]]></summary></entry><entry><title type="html">Integrating API Documentation</title><link href="https://www.thecandidstartup.org/2024/08/12/publish-api-documentation.html" rel="alternate" type="text/html" title="Integrating API Documentation" /><published>2024-08-12T00:00:00+00:00</published><updated>2024-08-12T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/08/12/publish-api-documentation</id><author><name>Tim Wiegand</name></author><category term="blog" /><category term="infinisheet" /><summary type="html"><![CDATA[Last time we got good results when we tried out TypeDoc for API reference documentation generation. I left you with a cliff hanger. How do we integrate TypeDoc into my GitHub Pages based publishing pipeline? And how should we surface API documentation on the blog focused Candid Startup site?]]></summary></entry><entry><title type="html">Bootstrapping TypeDoc</title><link href="https://www.thecandidstartup.org/2024/08/05/bootstrapping-typedoc.html" rel="alternate" type="text/html" title="Bootstrapping TypeDoc" /><published>2024-08-05T00:00:00+00:00</published><updated>2024-08-05T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/08/05/bootstrapping-typedoc</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="typescript" /><summary type="html"><![CDATA[Last time I gave up on using API Extractor to generate API Reference Documentation. API Extractor creates Markdown with embedded html tags as an intermediate format. It simply wasn’t compatible with GitHub Pages hosted sites.]]></summary></entry><entry><title type="html">InfiniSheet Architecture</title><link href="https://www.thecandidstartup.org/2024/07/29/infinisheet-architecture.html" rel="alternate" type="text/html" title="InfiniSheet Architecture" /><published>2024-07-29T00:00:00+00:00</published><updated>2024-07-29T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/07/29/infinisheet-architecture</id><author><name>Tim Wiegand</name></author><category term="cloud-architecture" /><category term="frontend" /><category term="infinisheet" /><summary type="html"><![CDATA[I’ve been working on my spreadsheet project for many months now. I started with very high level thinking and paper explorations of possible data structures and algorithms. Then I went to the other end of the scale and built a React virtual scrolling package that you could use to build the frontend for a large spreadsheet.]]></summary></entry><entry><title type="html">Bootstrapping API Extractor</title><link href="https://www.thecandidstartup.org/2024/07/19/bootstrapping-api-extractor.html" rel="alternate" type="text/html" title="Bootstrapping API Extractor" /><published>2024-07-19T00:00:00+00:00</published><updated>2024-07-19T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/07/19/bootstrapping-api-extractor</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="typescript" /><summary type="html"><![CDATA[I’m using TSDoc comments to provide IntelliSense based documentation for my open source project. Now I want to do more. Enter API Extractor.]]></summary></entry><entry><title type="html">Bootstrapping ESLint</title><link href="https://www.thecandidstartup.org/2024/07/15/bootstrapping-eslint.html" rel="alternate" type="text/html" title="Bootstrapping ESLint" /><published>2024-07-15T00:00:00+00:00</published><updated>2024-07-15T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/07/15/bootstrapping-eslint</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I’ve added some TSDoc based comments to my open source project. TSDoc has an ESLint plugin that checks for syntax errors in your TSDoc comments. I’d like to try it out, which means getting ESLint off the ground first.]]></summary></entry><entry><title type="html">Bootstrapping TSDoc</title><link href="https://www.thecandidstartup.org/2024/07/08/bootstrapping-tsdoc.html" rel="alternate" type="text/html" title="Bootstrapping TSDoc" /><published>2024-07-08T00:00:00+00:00</published><updated>2024-07-08T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/07/08/bootstrapping-tsdoc</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="typescript" /><summary type="html"><![CDATA[Last time I left you with the realization that documentation is a good thing and that I should probably write some. We all know that “nobody reads documentation”, so my main focus is on writing documentation that sneaks up on you and jumps out just as you need it.]]></summary></entry><entry><title type="html">React Virtual Scroll 0.4.0 : Customization</title><link href="https://www.thecandidstartup.org/2024/07/01/react-virtual-scroll-0-4-0.html" rel="alternate" type="text/html" title="React Virtual Scroll 0.4.0 : Customization" /><published>2024-07-01T00:00:00+00:00</published><updated>2024-07-01T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/07/01/react-virtual-scroll-0-4-0</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><category term="spreadsheets" /><summary type="html"><![CDATA[My VirtualList and VirtualGrid components use the same approach as React-Window. A lean and mean implementation that focuses just on virtualization. This is not SlickGrid. The idea is that you can use customization to build whatever higher level functionality you need on top.]]></summary></entry><entry><title type="html">Bootstrapping NPM Provenance with GitHub Actions</title><link href="https://www.thecandidstartup.org/2024/06/24/bootstrapping-npm-provenance-github-actions.html" rel="alternate" type="text/html" title="Bootstrapping NPM Provenance with GitHub Actions" /><published>2024-06-24T00:00:00+00:00</published><updated>2024-06-24T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/06/24/bootstrapping-npm-provenance-github-actions</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I’m putting my money where my mouth is. NPM provenance statements are great. Everyone should publish packages with a provenance statement. Including me.]]></summary></entry><entry><title type="html">Supply Chain Provenance</title><link href="https://www.thecandidstartup.org/2024/06/17/supply-chain-provenance.html" rel="alternate" type="text/html" title="Supply Chain Provenance" /><published>2024-06-17T00:00:00+00:00</published><updated>2024-06-17T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/06/17/supply-chain-provenance</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="cloud-architecture" /><summary type="html"><![CDATA[Many of us first became aware of the risks of a supply-chain attack with the SolarWinds hack of 2020. Attackers compromised the build system belonging to SolarWinds, the creator of popular network monitoring tool Orion.]]></summary></entry><entry><title type="html">React Virtual Scroll 0.3.0 : Paging Functional Test</title><link href="https://www.thecandidstartup.org/2024/06/10/react-virtual-scroll-0-3-0.html" rel="alternate" type="text/html" title="React Virtual Scroll 0.3.0 : Paging Functional Test" /><published>2024-06-10T00:00:00+00:00</published><updated>2024-06-10T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/06/10/react-virtual-scroll-0-3-0</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[I need a small test app with paged scrolling enabled to use for functional testing. I’ve talked previously about hacking the internal useVirtualScroll component to enable paged scrolling for small lists. I don’t want to have to keep doing that. Instead, I want to add the paging functional test as one of my set of permanent samples.]]></summary></entry><entry><title type="html">Bootstrapping GitHub Actions</title><link href="https://www.thecandidstartup.org/2024/06/03/bootstrapping-github-actions.html" rel="alternate" type="text/html" title="Bootstrapping GitHub Actions" /><published>2024-06-03T00:00:00+00:00</published><updated>2024-06-03T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/06/03/bootstrapping-github-actions</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[My monorepo is up and running. I can build, test, version and publish packages from my machine. However, what happens if I miss a step? How do I make sure that I keep on top of build quality?]]></summary></entry><entry><title type="html">React Virtual Scroll 0.2.0 : Horizontal List</title><link href="https://www.thecandidstartup.org/2024/05/27/react-virtual-scroll-0-2-0.html" rel="alternate" type="text/html" title="React Virtual Scroll 0.2.0 : Horizontal List" /><published>2024-05-27T00:00:00+00:00</published><updated>2024-05-27T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/05/27/react-virtual-scroll-0-2-0</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><category term="blog" /><summary type="html"><![CDATA[Exciting news! React-Virtual-Scroll 0.2.0 is out, including the long anticipated VirtualList horizontal layout feature.]]></summary></entry><entry><title type="html">Bootstrapping NPM Publish</title><link href="https://www.thecandidstartup.org/2024/05/21/bootstrapping-npm-publish.html" rel="alternate" type="text/html" title="Bootstrapping NPM Publish" /><published>2024-05-21T00:00:00+00:00</published><updated>2024-05-21T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/05/21/bootstrapping-npm-publish</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I figured out how to build usable library packages. Now I just have to work out how to get them published.]]></summary></entry><entry><title type="html">Bootstrapping NPM Package Build</title><link href="https://www.thecandidstartup.org/2024/05/13/bootstrapping-npm-package-build.html" rel="alternate" type="text/html" title="Bootstrapping NPM Package Build" /><published>2024-05-13T00:00:00+00:00</published><updated>2024-05-13T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/05/13/bootstrapping-npm-package-build</id><author><name>Tim Wiegand</name></author><category term="frontend" /><summary type="html"><![CDATA[I have my monorepo up and running for local development. However, I still haven’t figured out how to build usable library packages, or even what should be in them.]]></summary></entry><entry><title type="html">Bootstrapping a Lerna Monorepo</title><link href="https://www.thecandidstartup.org/2024/05/06/bootstrapping-lerna-monorepo.html" rel="alternate" type="text/html" title="Bootstrapping a Lerna Monorepo" /><published>2024-05-06T00:00:00+00:00</published><updated>2024-05-06T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/05/06/bootstrapping-lerna-monorepo</id><author><name>Tim Wiegand</name></author><category term="frontend" /><category term="infinisheet" /><summary type="html"><![CDATA[So far, all the front-end development work I’ve done has been in the repo I created when bootstrapping Vite. It’s starting to feel a little restrictive.]]></summary></entry><entry><title type="html">Modern React Virtual Scroll Grid 9 : Fixing SlickGrid</title><link href="https://www.thecandidstartup.org/2024/04/29/modern-react-virtual-scroll-grid-9.html" rel="alternate" type="text/html" title="Modern React Virtual Scroll Grid 9 : Fixing SlickGrid" /><published>2024-04-29T00:00:00+00:00</published><updated>2024-04-29T00:00:00+00:00</updated><id>https://www.thecandidstartup.org/2024/04/29/modern-react-virtual-scroll-grid-9</id><author><name>Tim Wiegand</name></author><category term="react-virtual-scroll" /><summary type="html"><![CDATA[Last time we integrated SlickGrid’s paged scrolling system and found that it came really close to working well.]]></summary></entry></feed>