<?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://felipe.lima.gl/feed.xml" rel="self" type="application/atom+xml" /><link href="https://felipe.lima.gl/" rel="alternate" type="text/html" /><updated>2026-05-05T17:01:15+00:00</updated><id>https://felipe.lima.gl/feed.xml</id><title type="html">felipe lima</title><subtitle>the personal website of felipe lima</subtitle><entry><title type="html">The balance sheet that lets me not work</title><link href="https://felipe.lima.gl/2026/05/05/the-balance-sheet-that-lets-me-not-work.html" rel="alternate" type="text/html" title="The balance sheet that lets me not work" /><published>2026-05-05T10:31:00+00:00</published><updated>2026-05-05T10:31:00+00:00</updated><id>https://felipe.lima.gl/2026/05/05/the-balance-sheet-that-lets-me-not-work</id><content type="html" xml:base="https://felipe.lima.gl/2026/05/05/the-balance-sheet-that-lets-me-not-work.html"><![CDATA[<blockquote>
  <p><em>Disclaimer: This is not financial, tax, or investment advice. It is a description of how I structure my own balance sheet, with risks I understand and accept for my situation. Borrowing against BTC, using DeFi protocols, and buying preferred stocks can all lose money or create tax consequences. Do your own work and talk to qualified professionals before copying any part of this.</em></p>
</blockquote>

<p>I’ve never sold a single sat — not because I never needed cash, but because I never needed to sell to get it.</p>

<p>For most of the last decade, my wife and I both worked, ongoing expenses came out of ongoing income, and the BTC stack just sat there doing what it does. Then I started a sabbatical, our household dropped to a single income, and a few months in we got hit with an unexpected tax bill bigger than our checking account.</p>

<p>We covered it. The stack is still intact. The bills are still paid. This article is about how.</p>

<h2 id="why-not-just-sell">Why not just sell?</h2>

<p>A small sale would have covered the tax bill with room to spare, and the dent in the stack would have been minor. So why bother?</p>

<ol>
  <li><strong>Conviction.</strong> I’ve spent <a href="/2021/01/01/bitcoin.html">years</a> accumulating a position in what I believe is the best long-term store of value available. Selling to fund consumption — even a tax bill, even a sabbatical — is liquidating the future to pay for the present. If the thesis is right, every sat sold today is many more sats foregone in a decade. The whole point of accumulating a scarce asset is to <em>not</em> sell it under normal circumstances. A tax bill isn’t an extraordinary circumstance.</li>
  <li><strong>Tax drag.</strong> Every sale is a taxable event. After years of accumulation, the cost basis on most of the stack is deep enough that selling realizes a meaningful gain. That gain compounds the original problem: the tax bill that prompted the sale generates a new tax bill the following April. Selling appreciated BTC to pay taxes is a cycle that gets worse the longer you’ve held — exactly the opposite of how a good capital structure should behave.</li>
  <li><strong>Optionality.</strong> Once converted to dollars and spent, it’s gone. While it’s still on the balance sheet, it’s collateral, it’s optionality, it’s a reserve. Every dollar of expense covered without selling preserves the entire future of that capital, not just its current value. The stack is more useful as collateral than it ever would be as cash.</li>
</ol>

<p>The structure below falls out of these three points almost by necessity. If you don’t sell appreciated BTC and you have ongoing expenses, you need a way to turn the stack into cash flow without touching the principal. That’s the whole problem. The rest of this post is the answer.</p>

<h2 id="the-structure">The structure</h2>

<p>Three working layers, one output. The diagram shows how capital moves through them; each paragraph after explains what one layer is doing.</p>

<p><img src="/images/2026/05/btc_carry_trade_conceptual_structure.svg" alt="conceptual_structure.svg" /></p>

<p><strong>BTC collateral.</strong> The stack sits on permissionless lending protocols — primarily <a href="https://aave.com/help/aave-101/accessing-aave">Aave v3</a> and <a href="https://docs.morpho.org/">Morpho</a>. These accept BTC as collateral and lend stablecoins against it, governed by smart contracts and over-collateralization rather than counterparty trust. The stack itself doesn’t move when you borrow against it. It’s locked in a smart contract, but it’s still your BTC, and the position can be unwound at any time by repaying the loan.</p>

<p><strong>Stablecoin debt.</strong> Against the BTC collateral, I borrow <a href="https://www.circle.com/usdc">USDC</a>. The borrow is variable-rate, and the rate moves with utilization in the lending market. The borrowed dollars are mine to deploy however I choose; the protocol doesn’t care what they’re used for. The ratio between borrow size and collateral value, called the health factor, is the key risk dial. More on that later.</p>

<p><strong>Yield vehicles.</strong> The borrowed USDC is deployed into Bitcoin treasury preferred stocks — publicly traded preferreds issued by companies whose treasuries hold Bitcoin and are over-collateralized. The two I hold are <a href="https://www.strategy.com/strc/learn">STRC</a>, issued by <a href="https://www.strategy.com/">Strategy</a> (formerly MicroStrategy), and <a href="https://investors.strive.com/news-events/news-releases/news-details/2026/Strive-Announces-Increase-to-SATA-Perpetual-Preferred-Stock-Dividend-Rate-to-13-00-and-Bitcoin-Buy/default.aspx">SATA</a>, issued by <a href="https://www.strive.com/">Strive, Inc.</a>. Both pay monthly distributions at yields well above current borrow costs. Holding them roughly half-and-half spreads issuer risk while keeping the blended yield in the same band.</p>

<p><strong>The output.</strong> Distributions land in the brokerage every month. Some of it covers living expenses, some compounds back into more shares, and the cycle continues. The carry — the spread between what the preferreds pay and what the loan costs — is the engine. As long as the spread stays positive and the collateral stays healthy, the structure produces cash flow indefinitely. The stack does not move.</p>

<hr />

<p>That’s the structure at a high level. Operationally, getting BTC into the system and dollars out of it involves a few more steps:</p>

<p><img src="/images/2026/05/btc_carry_trade_operational_pipeline.svg" alt="operational_pipeline.svg" /></p>

<p>The on-ramp moves native BTC from cold storage onto a centralized exchange, swaps it for a wrapped form like <a href="https://wbtc.network/"><code class="language-plaintext highlighter-rouge">WBTC</code></a> or <a href="https://www.coinbase.com/cbbtc"><code class="language-plaintext highlighter-rouge">cbBTC</code></a>, and bridges that token into a self-custody wallet where it can be deposited into Aave or Morpho. The off-ramp runs in reverse: USDC distributions arrive in the brokerage from the preferreds, get converted to dollars at an exchange when needed, and ACH out to a bank account.</p>

<p>Two friction points worth treating carefully. The on-ramp is where custodian risk lives: <code class="language-plaintext highlighter-rouge">WBTC</code> depends on BitGo honoring redemption, <code class="language-plaintext highlighter-rouge">cbBTC</code> depends on Coinbase. That’s a different kind of trust assumption than the protocol risk on Aave or Morpho, and the choice of wrapped token deserves its own post. The off-ramp is where most of the operational tax and timing questions live — when to convert, how much to keep in stablecoins versus dollars, how to think about reserve sizing across both forms. I’ll cover those in a follow-up.</p>

<p>The pipeline is plumbing. The carry is the engine.</p>

<h2 id="what-it-produces">What it produces</h2>

<p>Three outputs, each useful for different reasons.</p>

<p><strong>1. Monthly cash flow.</strong> The preferreds pay distributions monthly. They land in the brokerage on a predictable cadence, in dollar terms, regardless of where BTC is trading. The blended yield on the position sits well above the variable borrow rate on the loan, and the spread between them (the carry) is what makes the whole thing work. As long as that spread stays positive, the position generates more income than it costs to hold. For our household, the carry covers ongoing expenses with room to spare. It’s not passive in the sense that it requires no attention; it’s passive in the sense that it doesn’t require a job.</p>

<p><strong>2. Liquidity on demand.</strong> This is what the tax bill demonstrated. When the bill came due, I didn’t sell anything. I increased the size of the existing loan, withdrew the additional USDC, converted it to dollars, and paid the IRS — all within a couple of days. The stack didn’t move. No realized gain, no fire sale into whatever price BTC happened to be trading at that week. Over the following months, the additional borrow gets paid down out of distribution income.</p>

<p>The general point: any large unexpected expense — a tax bill, a medical event, a major repair — can be funded by temporarily increasing the borrow rather than liquidating the underlying asset. The collateral stays in place. The carry continues. The expense gets absorbed into the existing structure rather than triggering a new round of decisions about what to sell and when.</p>

<p><strong>3. Tax treatment that compounds.</strong> The most counterintuitive of the three, and it makes the strategy meaningfully better than the headline yield suggests.</p>

<p>Distributions from STRC and SATA are expected to be classified as <a href="https://www.irs.gov/publications/p550">return of capital</a> (ROC), which means the IRS generally treats them as the company returning your own capital to you rather than paying you income. ROC distributions aren’t taxed in the year you receive them to the extent you still have basis in the shares. Instead, they reduce your cost basis, and tax is deferred until you eventually sell — at which point the gain is calculated against the lower basis. In practice: much of the cash flow arrives tax-deferred, the eventual tax event is a capital gain at a future date of your choosing, and the compounding inside the position runs with less annual tax drag.</p>

<p>Three outputs, one engine. The stack stays put through all of it.</p>

<h2 id="risk-management">Risk management</h2>

<p>At this point, this probably sounds either too good or too risky depending on your priors. Both reactions are reasonable. This section is about the dials that determine which one is closer to right.</p>

<p><strong>1. The health factor.</strong> Every position on a lending protocol carries a health factor (HF) — the ratio between collateral value and borrow value, adjusted for the protocol’s liquidation threshold. When HF falls below 1, the protocol liquidates a portion of your collateral to pay down the loan. This is the risk every BTC-collateralized borrower needs to understand before doing anything else.</p>

<p>The dial is set by how much you borrow against a given amount of collateral. Borrow aggressively and HF sits close to the liquidation line; borrow conservatively and there’s significant headroom. I run a conservative HF — meaningful headroom against a fast drawdown, with capacity to absorb a sharp drop in BTC price without forced selling. The cushion needs to be large enough to survive the worst drawdown you can plausibly imagine, not the average one. Liquidation isn’t as catastrophic as it sounds — the protocol sells a portion of the collateral, not all of it — but forced selling at the worst possible moment is exactly what this entire structure exists to avoid.</p>

<p><strong>2. The reserve.</strong> A cash reserve held outside the carry engine, sized as a percentage of outstanding debt rather than an absolute number. If BTC drops sharply and HF compresses, the reserve can be deployed to pay down a portion of the loan immediately, restoring headroom without selling a single sat.</p>

<p>The reserve doesn’t earn the full carry — it sits in conservative stablecoin vaults that produce a modest return, and that yield drag is real. I think of it as an insurance premium: it doesn’t pay for itself in normal markets; it pays for itself by preventing the one moment in a decade when you’d otherwise be forced to make a bad decision. I size it at roughly 15-20% of outstanding debt — enough to absorb a significant drawdown without panic, small enough that the yield drag stays modest. Set this dial yourself based on your own drawdown tolerance and conviction.</p>

<p><strong>3. Carry compression.</strong> Slower and less dramatic. The carry is what makes the structure economic. If borrow rates spike or distribution yields compress, the spread narrows. If it goes negative, the engine stops producing income and starts costing money to run.</p>

<p>The management is mostly attention: monitor borrow rates, watch issuer dynamics, be willing to delever or rotate if the carry collapses for structural rather than transient reasons. A short-term utilization spike is something to wait through; a sustained inversion is something to act on.</p>

<hr />

<p>Most of the risks here aren’t market risks in the conventional sense. The structure is robust to BTC volatility — that’s what the health factor and the same-asset framing are for. The risks that matter are operational and structural: managing the collateral cushion, keeping a reserve, monitoring the carry, making thoughtful protocol choices on the wrap and the lending venue. None of these is dramatic. All are continuous. The strategy doesn’t blow up in a single moment; it works or it doesn’t based on whether the dials are watched.</p>

<p>The structure isn’t risk-free. It’s risk-shaped. The shape is one I’m comfortable with at the size I run it.</p>

<h2 id="who-this-isnt-for">Who this isn’t for</h2>

<p>The strategy works for a specific kind of operator with a specific kind of capital, and it doesn’t generalize down. If you recognize yourself in any of these, the right move is to find a different vehicle for your capital.</p>

<ul>
  <li><strong>Your stack isn’t large enough for the math to work.</strong> The carry produces a percentage spread, not a fixed dollar amount. Below a certain stack size, the absolute income doesn’t justify the operational overhead — gas costs, monitoring time, tax complexity, mental load. If your BTC position is small enough that a 5% drawdown wouldn’t change your sleep but the resulting carry wouldn’t change your life either, the strategy isn’t for you.</li>
  <li><strong>Smart contract risk keeps you up at night.</strong> The structure depends on permissionless lending protocols continuing to function as designed. Aave and Morpho have years of operational history and significant audit footprints, and I’ve made my peace with the residual risk. Some people reasonably haven’t. If meaningful capital exposed to smart contract bugs, oracle failures, or governance attacks is something you’d lose sleep over, that’s information. Don’t override it.</li>
  <li><strong>You’d panic-close in a real drawdown.</strong> The strategy survives a 50% drawdown if the operator doesn’t intervene at the worst moment. Operators who unwind the moment things look ugly turn a survivable drawdown into a realized loss — exactly the failure mode the structure was built to avoid. Self-knowledge matters more here than analytical understanding. If you’ve panic-sold before, you’ll panic-close this.</li>
  <li><strong>This would be your survival capital, not your excess capital.</strong> The most important filter. A strategy that depends on not being forced to liquidate during drawdowns can only be run with capital you can afford to have at risk. If a bad year would mean rent issues, tuition issues, or runway issues, do not run it. The structure produces income on excess capital; it cannot turn working capital into something safer than it is.</li>
  <li><strong>Your conviction in BTC is shakier than you’d like to admit.</strong> The quiet disqualifier most operators skip. The strategy borrows dollars against BTC and depends on the thesis playing out over multi-year horizons. Weak conviction shows up at the worst moments — selling collateral into drawdowns, closing the position when the carry compresses temporarily, second-guessing during macro volatility. The structure rewards conviction and punishes its absence. If you’re not sure where you stand, find out before building leverage on top of the position.</li>
</ul>

<h2 id="closing-thoughts">Closing thoughts</h2>

<p>My sabbatical is funded by the structure described above. Bills paid, stack intact, distributions arriving monthly, tax bill absorbed without panic. None of that was hypothetical when I started writing this — it’s the actual operating reality of the past several months.</p>

<p>Understanding the strategy and running it are different problems. The structure has many small decisions that aren’t visible at the level of a blog post: which lending protocol to use for which slice, how to size the wrap relative to the borrow, how to think about reserves across stablecoin vehicles, how to manage the off-ramp, when to delever and when to hold. Most of these don’t have right answers — they have answers that fit your situation, your tolerance, and your existing balance sheet. Working through them yourself is entirely possible. It’s also slower and more error-prone than working through them with someone who’s already operated through the relevant scenarios.</p>

<p>A small number of operators have asked me to think through this with them for their own situations. Some of those conversations turn into ongoing structures; some turn into a single working session and a clean answer. If you’re considering whether something like this fits your capital, and you’d find it useful to work through it with someone who’s running it, I’m reachable at <strong>carry.degrading227@passmail.com</strong>. A brief note about your situation is more useful than a generic intro.</p>

<p>Either way, the post above is the lay of the land. The case for not selling appreciated BTC during a sabbatical — or any other period of life that requires cash flow without principal erosion — stands on its own. I hope it’s useful.</p>

<p>Disclosure: I used an LLM as an editing assistant for this essay, mainly for proofreading, wording, structure, and link suggestions. The strategy described here is my own, and I reviewed and approved the final text.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Disclaimer: This is not financial, tax, or investment advice. It is a description of how I structure my own balance sheet, with risks I understand and accept for my situation. Borrowing against BTC, using DeFi protocols, and buying preferred stocks can all lose money or create tax consequences. Do your own work and talk to qualified professionals before copying any part of this.]]></summary></entry><entry><title type="html">Breaking up with big tech: A year into homelabbing</title><link href="https://felipe.lima.gl/2025/10/31/homelabbing.html" rel="alternate" type="text/html" title="Breaking up with big tech: A year into homelabbing" /><published>2025-10-31T10:31:00+00:00</published><updated>2025-10-31T10:31:00+00:00</updated><id>https://felipe.lima.gl/2025/10/31/homelabbing</id><content type="html" xml:base="https://felipe.lima.gl/2025/10/31/homelabbing.html"><![CDATA[<p>I have a completely random new hobby that I’ve picked up over the past year or so:</p>

<p>Homelabbing.</p>

<h2 id="how-it-started">How it started</h2>

<p>I call it “random” because I didn’t know this was a thing before I started. To me, it’s always been “I have a desktop PC at home and like to tinker with it for fun.” I haven’t had one in a long time—probably since my early twenties, when laptops became ubiquitous. I ported my life to the cloud and ditched my home PC.</p>

<p>Being fully mobile has its benefits, but I’ve grown increasingly worried about how much big tech companies know about me. Google basically owns my life: Gmail, Messages, Drive, Photos, Calendar, Contacts, Google Fi—the list goes on. My entire life is there. They certainly know more about me than I know about myself, which is scary.</p>

<p>I’ve been thinking more about breaking that dependency. Buying a desktop PC off Craigslist in May 2024 was the first step. At the time, I inventoried my most heavily used Google services:</p>

<ul>
  <li>Google Drive: 13.2 GB</li>
  <li>Gmail: 8.7 GB</li>
  <li>Google Photos: 106.5 GB</li>
</ul>

<p>Gmail will probably be the hardest of these three, so I decided to start with Google Photos—I had a clear migration path: move to <a href="https://immich.app/">Immich</a>.</p>

<p>The migration turned out to be less daunting than I expected. <a href="https://takeout.google.com">Google Takeout</a> made the whole process much more approachable. I’m definitely grateful for that tool.</p>

<h2 id="nas">NAS</h2>

<p>I started by getting a <a href="https://en.wikipedia.org/wiki/Network-attached_storage">NAS</a> on eBay, which opened up another huge rabbit hole. <a href="https://mtlynch.io/budget-nas/">Michael Lynch’s</a> excellent blog post helped me a ton—go read it if you’re interested, as it goes into much more depth on this topic.</p>

<p>I ended up with a HPE ProLiant MicroServer Gen10 Plus v2 G6405 2-core 1P 16GB-U VROC - P69102-005. It’s probably overpowered (and overpriced) for running <a href="https://www.truenas.com/">TrueNAS</a>, but I like the build quality and form factor—it’s quite small and the hardware is “enterprise grade,” which hopefully means it’s built to last. It has 21TB of usable storage, which should last me a few years at least.</p>

<p><img src="/images/2025/10/nas.png" alt="image.png" /></p>

<p>Before I jumped into homelabbing, I had no idea there was an entire <a href="https://www.reddit.com/r/homelab/">community</a> around it, with tons of content online. It’s been perfect for scratching both my nerd itch and my self-reliance itch at the same time!</p>

<h2 id="how-its-going">How it’s going</h2>

<p>Here’s the server config I landed on, as of today, after a few minor upgrades along the way:</p>

<ul>
  <li>CPU: Intel Core i7-13700K</li>
  <li>GPU: Gigabyte GeForce RTX 4080 16GB</li>
  <li>RAM: Teamforce RGB 64GB 3200MHz DDR4</li>
  <li>Motherboard: <a href="https://us.msi.com/Motherboard/PRO-Z790-P-DDR4/Specification">MSI Z790-P DDR4</a></li>
  <li>Air Cooler: 2x Noctua NF A12x25</li>
  <li>Storage: WD_black sn850X 1TB SSD + Seagate Barracuda Pro 12TB HDD SATA</li>
  <li>Power: NZXT C750</li>
  <li>Case: NZXT H7</li>
  <li>Ubuntu 25</li>
</ul>

<p>It’s a pretty beefy server, capable of running the full workload and not even break a sweat 🥵.</p>

<p>After migrating all my photos to Immich, I started thinking of other low hanging fruit I could <a href="https://www.reddit.com/r/selfhosted/">self host</a>. Fast forward about a year, I ended up with this ever growing list of running services 😅:</p>

<ul>
  <li>Finances - Self-hosted personal finances management (private, custom built)</li>
  <li><a href="https://frigate.video/">Frigate</a> - NVR with AI object detection plus some <a href="https://www.amazon.com/dp/B0BMWFTFLS">Amcrest</a> cameras</li>
  <li><a href="https://nicolargo.github.io/glances/">Glances</a> - System monitoring tool</li>
  <li><a href="https://github.com/qdm12/gluetun">Gluetun</a> - VPN client and router</li>
  <li><a href="[https://gethomepage.dev/](https://gethomepage.dev/)">Homepage</a> - App dashboard</li>
  <li><a href="[https://www.home-assistant.io/](https://www.home-assistant.io/)">Home Assistant</a> - Home automation</li>
  <li><a href="https://immich.app/">Immich</a> - Self-hosted photo and video backup</li>
  <li><a href="https://github.com/Jackett/Jackett">Jackett</a> - Torrent tracker indexer</li>
  <li><a href="https://ollama.com/">Ollama</a> - Local LLM server</li>
  <li><a href="https://openwebui.com/">Open Web UI</a> - Local LLM chat interface</li>
  <li><a href="https://pi-hole.net/">Pi-Hole</a> - Network-wide ad blocker</li>
  <li><a href="https://www.qbittorrent.org/">QBittorrent</a> - Torrent client</li>
  <li><a href="https://docs.docker.com/registry/">Docker Registry</a> - Private Docker image registry</li>
  <li><a href="https://traefik.io/">Traefik</a> - Reverse proxy and load balancer</li>
  <li><a href="[https://tailscale.com/](https://tailscale.com/)">Tailscale</a> - Private VPN</li>
  <li><a href="https://vaultwarden.com/">Vaultwarden</a> - Self-hosted password manager</li>
  <li><a href="https://github.com/containrrr/watchtower">Watchtower</a> - Automatic container updates</li>
</ul>

<p>That’s quite a list! Everything runs smoothly with Docker Compose 😍—except for Home Assistant, which runs HAOS on its own VirtualBox VM (the Docker installation can’t run add-ons, which was a deal breaker for me).</p>

<p>I also registered my own homelab domain with <a href="https://aws.amazon.com/route53/">AWS Route 53</a> and pointed it to my Tailscale server IP. Now I can access my home network from anywhere on my phone or laptop, as long as I’m connected to Tailscale. Complete with TLS from <a href="https://letsencrypt.org/">Let’s Encrypt</a>!</p>

<p>Not gonna lie, it’s a pretty sweet setup! For example, I can navigate to <a href="http://photos.lab.example.com"><code class="language-plaintext highlighter-rouge">photos.lab.example.com</code></a> (not my actual domain, of course) and connect to any of the services above, since they all sit behind the Traefik reverse proxy.</p>

<h2 id="next-steps">Next steps</h2>

<p>While I’m pretty happy with my current setup, there’s still a long list of cloud services I’d like to get rid of. Namely, Gmail and Drive are probably next on my list for 2026. I’ve also been working on a way to make it much easier to launch and run my own private apps in my home network with a single command. The pitch is:</p>

<aside>
💡

What if you could have your own private [Heroku](https://www.heroku.com/) running in your homelab? That’s why I started working on `hl` (short for “homelab”).

</aside>

<p>My goal is to <code class="language-plaintext highlighter-rouge">hl init appname</code>, <code class="language-plaintext highlighter-rouge">git remote add production ssh://homelab/app.git</code> then <code class="language-plaintext highlighter-rouge">git push production master</code> which builds the Docker image, sets up a <code class="language-plaintext highlighter-rouge">systemctl</code> service and starts it up behind Traefik. Then, I could immediately go to <a href="http://appname.lab.example.com"><code class="language-plaintext highlighter-rouge">appname.lab.example.com</code></a> and see it running in my VPN automagically. This is already possible today, but I’d like to expand on it so it’s more useful over time and hopefully useful for other people as well!</p>

<p>If you’d like to try it, check out the <a href="https://github.com/felipecsl/hl">Github repo</a> and let me know! Contributions are always welcome.</p>

<p>*Disclaimer: An LLM was used to help improve my writing. Nevertheless, rest assured this article was crafted by a human (myself) 🤖.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[I have a completely random new hobby that I’ve picked up over the past year or so:]]></summary></entry><entry><title type="html">Borderline Detours</title><link href="https://felipe.lima.gl/2025/02/02/borderline-detours.html" rel="alternate" type="text/html" title="Borderline Detours" /><published>2025-02-02T10:31:00+00:00</published><updated>2025-02-02T10:31:00+00:00</updated><id>https://felipe.lima.gl/2025/02/02/borderline-detours</id><content type="html" xml:base="https://felipe.lima.gl/2025/02/02/borderline-detours.html"><![CDATA[<p><img src="/images/2025/02/avianca-airplane.jpeg" alt="Airplane shot" /></p>

<p>As I made my way from Miami to São Paulo once again last week, I thought I’d pause and reflect on all the times I’ve
taken this trip over the past 13 years.</p>

<p>I first moved to the US back in January 2012. I haven’t kept an exact count of how many times I’ve made this journey,
but a safe estimate is about 2.5 times per year — over 30 trips in total. That adds up to hundreds of thousands of miles
traveled, enough to circle the globe multiple times.</p>

<p>I’ve never been particularly loyal to any airline and have always prioritized cost and reasonable routes. Flying from the
West Coast to my hometown, <a href="https://en.wikipedia.org/wiki/Porto_Alegre">Porto Alegre</a>, usually takes two stops — that is,
three flights in total. When I lived in San Francisco it was a lot easier, as the city offers more flight options to Central
and South America compared to Seattle.</p>

<p>I’ve tried many different routes, hacks and airlines throughout these years and had my fair share of missed and delayed
flights, missed connections, frustration, exhaustion, and jet lag. Over time, I’ve gravitated towards Copa Airlines, as
they offer a direct flight from Panama City to Porto Alegre. After some experimentation, my usual route became
SEA/SFO – MIA – PTY – POA. My second-best option is flying through São Paulo (GRU) instead of PTY, but I prefer to avoid
it because of its constant chaos.</p>

<p>The total trip time is usually about 24 hours door-to-door, which is massively long and draining. I always land absolutely
exhausted but try to adapt to the local timezone as quickly as possible by getting some sunlight, exercising if I have
the energy, and going to bed at a normal local time — even if it’s hard to stay awake sometimes. I’ve learned
this is the quickest way to adjust, otherwise I’d take much longer to shift my internal clock. It’s just 1-2 days of
pain and then smooth sailing afterward.</p>

<p><a href="/2023/09/23/overseas-travel-with-baby.html">In a previous post</a>, I shared what it was like traveling this route with my
family for the first time. It was quite an experience.</p>

<p>Living this split life between two distant places hasn’t been easy, but with family still in Brazil and
as an only son, meant I’d have to keep coming back to care for my mom who is quite old and frail.</p>

<p>Despite the challenges, I still believe that moving to the US was one of the best decisions I’ve ever made. I have no
regrets, although at times I’ve thought about saying “screw it” and giving up. One especially painful moment was back in
2013 when I was returning to the US and went through immigration in Atlanta, GA.</p>

<p>At the time, I had recently switched jobs and was still on a H-1B visa. The way the H-1B visa worked (and still works),
the work permit and temporary residency it grants is contingent on being in full-time employment, and it was tied to 
the employer. When switching jobs, you don’t need to get a new visa stamp on your passport <em>unless</em> you leave the US. 
If you do, you must go to US consulate on your country (at the time, the closest for me was in Rio de Janeiro) and
go through the whole process again, which was slow and expensive.</p>

<p>I had no idea about any of this, so I learned it the hard way. At the Atlanta International airport, I was
pulled into secondary inspection at the immigration checkpoint and held there for several hours. I was interrogated
multiple times and locked in a small room with no windows all day, with no access to the outside world. I was essentially
detained and held hostage, while the CBP officers sorted out my status. Eventually, they informed me that my visa was not
valid and I wasn’t admissible into the US. My visa was immediately revoked, and I was escorted by armed officers to the
next flight back to Brazil, as if I were a criminal. I still remember people staring at me at the gate, as I was sent back
to Brazil, utterly confused and frustrated.</p>

<p>At that time, I was still in my 20s, with my entire career ahead of me and excited about the prospect of starting my 
life in the US. I went through the hassle of renewing my visa and eventually flew back about a month later — this time,
I was finally admitted.</p>

<p>That was an incredibly frustrating experience that I’ll certainly never forget. Being detained and deported was a
traumatic experience, but it wasn’t enough to stop me.</p>

<p>It’s crazy to me how broken the US immigration system still is. Today, crossing the border illegally is often “easier”
than through the legal channels. The bureaucracy, unpredictability, and inefficiency create unnecessary barriers for talented 
individuals who want to contribute to this country. I hope that this administration prioritizes fixing this, as 
countless other skilled and motivated individuals dream of starting their lives in the US but don’t have the same luck 
and opportunities that I had.</p>

<p>A comprehensive immigration reform is long overdue. The US should adopt a merit-based point system for skilled 
immigration — just as Canada and Australia have done successfully. We don’t need to reinvent the wheel — just follow what
has worked. A system that prioritizes high-skilled workers and streamlines legal pathways would benefit both immigrants
and the US economy.</p>

<p>Today, I’m proud to be a US (and Brazilian) citizen. This country has given me incredible opportunities, and I hope to 
see it continue improving for future generations. 🇺🇸</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Reframing Expectations</title><link href="https://felipe.lima.gl/2024/08/14/reframing-expectations.html" rel="alternate" type="text/html" title="Reframing Expectations" /><published>2024-08-14T10:31:00+00:00</published><updated>2024-08-14T10:31:00+00:00</updated><id>https://felipe.lima.gl/2024/08/14/reframing-expectations</id><content type="html" xml:base="https://felipe.lima.gl/2024/08/14/reframing-expectations.html"><![CDATA[<p>I’ve recently developed a new sort of “mental hack” that has proved quite useful whenever I feel the urge to complain to
myself about the behaviors and actions of people around me, especially people close to me.</p>

<p>For the longest time, I’ve had this terrible habit of getting frustrated and disappointed whenever people didn’t behave
in a way that I thought they should, or that I thought was best. If I judged their behavior or actions to be “not-ideal”
or just plain stupid, I’d wish in my head they would just magically act the way I wanted them to and would get highly
frustrated whenever they inevitably didn’t comply with my wishes. Sometimes, I would voice these requests and wishes to
people, framing it as an ask, with the best of intentions. This, unsurprisingly, never worked.</p>

<p>The simple act of writing this down makes it clear to me how incoherent this kind of expectation is. Trying to impose
your own wishes and desires onto others is a ridiculous idea. Still, I’m sure I’m not the only one who has such unrealistic
expectations, as I’ve been on the other side of this equation myself numerous times.</p>

<p>Funny enough, what actually helped change my unreasonable expectations was framing my self-talk in a completely different
way.</p>

<p>Whenever I felt like someone should act in a certain way that didn’t match reality, I immediately reminded myself of the
following. Let’s use <em>John</em> as an example:</p>

<blockquote>
  <p><em>“John is a human and that’s what he does. Just like a dog barks, a child cries and waves break on the shore, this is
what John does and I can’t change him”.</em></p>
</blockquote>

<p>This simple reminder has done wonders for me. The frustrating bit is knowing that people <em>can</em> change, but only if
<strong><em>they want</em></strong>. That’s the tricky part. People won’t change because I want them to. No amount of pressure can do that.
In fact, the more pressure I apply, the more pushback I’m likely to get. It’s like compressing a spring.</p>

<p>This works because the most powerful story in the world is the one you tell yourself. I can choose to tell myself any
story I want. I can decide to change how I frame things, and that can magically lead to less frustration and more happiness.
It’s as simple as that.</p>

<blockquote>
  <p><em>“Be strict with yourself and forgiving of others. The reverse is hell for everyone.”</em></p>
</blockquote>

<p>Another framing that has helped me tremendously is remembering that people are mostly a product of their environment and
circumstances. People don’t often choose to act in dumb or evil ways “just because” (granted, this happens, of course!).
They do so because that’s what they’ve been conditioned to do. We’re animals behaving in accordance with our genetic
programming and our social norms and constructs. Remember this next time you have negative feelings towards someone.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[I’ve recently developed a new sort of “mental hack” that has proved quite useful whenever I feel the urge to complain to myself about the behaviors and actions of people around me, especially people close to me.]]></summary></entry><entry><title type="html">2023 Annual Review</title><link href="https://felipe.lima.gl/2024/01/18/2023-annual-review.html" rel="alternate" type="text/html" title="2023 Annual Review" /><published>2024-01-18T10:31:00+00:00</published><updated>2024-01-18T10:31:00+00:00</updated><id>https://felipe.lima.gl/2024/01/18/2023-annual-review</id><content type="html" xml:base="https://felipe.lima.gl/2024/01/18/2023-annual-review.html"><![CDATA[<blockquote>
  <p>💡 “Being a parent is having a job where you’re on call 24/7/365 with an abusive boss who screams at your and can’t tell you what he wants. The best part is, you’re gonna love it.”</p>
</blockquote>

<p>Looking back 10 years from now, I think 2023 will probably be the one of the most important years of my adult life.</p>

<p>I’ve never dreamed of or really wanted to have kids at all, at least not up until maybe a couple of years ago. I suddenly saw myself open to the idea and my wife pushed me over the edge, since she was clear that she wanted it. In fact, i’ve always dreaded the idea so much that I thought I never would want it.</p>

<blockquote>
  <p><em>“Time is a flat circle” - Rust Cohle</em></p>
</blockquote>

<p>I feel like life so far has been a 38 years long mental preparation for this moment. This is the true test of patience, resilience. I now see parenthood with completely different eyes. I never understood this crazy idea of sacrificing your own life, putting all other hopes and dreams on hold (at least temporarily) to raise this tiny creature.</p>

<p>I may have read this somewhere or listened in a podcast, not sure when or where, but this idea stuck with me:</p>

<blockquote>
  <p><em>“Becoming a parent is living the fullest experience of what it means to be a human being”.</em></p>
</blockquote>

<p>It’s like going to Disneyland but not riding the coolest, scariest ride (I’ve never been, honestly, so can’t confirm). It’s like playing Mortal Kombat but stopping short of killing the Shao Khan. Or M. Bison on Street Fighter. You get the picture.</p>

<p>It’s one of the hardest things you can do, but it provides meaning and a sense of accomplishment in what could easily feel like a pointless and senseless existence. Not that this was the case for me, but I now definitely feel like having kids is one of the most tried and true ways to live a happy and meaningful life. Definitely not for everyone, though and I wouldn’t normally recommend it to people. The motivation has to be intrinsic, otherwise it doesn’t work.</p>

<p>I now finally understand it.</p>

<p>Anyways, 2023 hasn’t been a year of much reflection for me, for obvious reasons. I tried my best to stick to my systems and habits, but everything is basically thrown out the window when you have a baby waking you up, screaming at the top of their lungs at 2am, 4am, 6am, etc.</p>

<p>Despite all the challenges, it’s been an incredibly rewarding and meaningful year.</p>

<p>I still somehow found time to read some books here and there between feedings and diaper changes.</p>

<h2 id="favorite-reads-in-2023-">Favorite reads in 2023 📚</h2>

<ul>
  <li><a href="https://www.amazon.com/Principles-Life-Work-Ray-Dalio/dp/1501124021/">Principles, Life and Work - Ray Dalio</a></li>
  <li><a href="https://www.amazon.com/Clear-Thinking-Turning-Ordinary-Extraordinary/dp/0593086112">Clear Thinking - Shane Parrish</a></li>
  <li><a href="https://www.amazon.com/Nonviolent-Communication-Language-Life-Changing-Relationships/dp/189200528X">Nonviolent Communication - Marshall Rosenberg</a> (planning to re-read in 2024)</li>
  <li><a href="https://www.amazon.com/Broken-Money-Financial-System-Failing/dp/B0CNS7NQLD">Broken Money - Lyn Alden</a></li>
</ul>

<h2 id="favorite-quotes-️">Favorite quotes ✍️</h2>

<blockquote>
  <p><em>“In order to be right, you must be willing to change your mind” - Shane Parrish</em></p>
</blockquote>

<blockquote>
  <p><em>“People of the nation do not understand our banking and monetary system, for if they did, I believe there would be a revolution before tomorrow morning“ - Henry Ford</em></p>
</blockquote>

<h2 id="work-">Work 🚧</h2>

<blockquote>
  <p><em>“The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency.” - Bill Gates</em></p>
</blockquote>

<p>In 2023 I’ve changed my view on remote work a bit. While I’ve always advocated for it, I now see clearly that the quote above makes perfect sense. A team or company with a malfunctioning process will only magnify the problem in a remote environment.</p>

<p>Some of my friends are having to deal with companies who are enforcing a “return to work” policy 2-4 times per week and I know for sure I wouldn’t like to be in a situation where I’m forced to go to the office N times a week in order to keep my job. On the other hand, I’d like to have the option (but not the obligation) to go to the office when I feel the need to and if it’s convenient for me to do so. Some problems are just much much easier to be solved in person and you just don’t get the same team vibe, culture, trust and camraderie in a remote setting.</p>

<p>It takes a lot of rigor and discipline for a remote team to function well, otherwise it just exposes the cracks in the system.</p>

<p>In 2023 I’ve returned to having a full time employment with an early stage startup, <a href="https://alza.app">Alza</a>, a neobank whose mission resonated with me, empowering the latino population in the US to have access to banking and save for the future.</p>

<p>I’ll write more on the subject in a future post but, for the time being I’ll just say that I enjoyed learning Go. I still wouldn’t trade Kotlin for it, though 🙂 Go’s error handling verbosity gets on my nerves.</p>

<p>I haven’t spent much time at all working on <a href="https://huskly.finance">Huskly</a> this year, since there were no hours left on my days (or energy, really), but I expect that to change in 2024.</p>

<p>All in all, it was a year of personal growth for me, learning to be a father, to be more patient and to use my time more effectively and efficiently.</p>

<h2 id="personal-life">Personal life</h2>

<p>In 2023 we spent a lot of time in Brazil, which was nice since we escaped some of the Seattle winter, saw friends and family and allowed Elena to have exposure to a different culture and language. We want her to be fluent both in English and Portuguese, so we gotta start early.</p>

<p>Flying with a baby turned out to be a real struggle, though, as I’ve <a href="https://felipe.lima.gl/2023/09/23/overseas-travel-with-baby.html">documented here</a>. We still have the return trip to go through.</p>

<p>This year I’ve also faced more family health struggles, which are still ongoing. My mom’s health has been deteriorating fast and that’s drained a big chunk of my attention and energy on a daily basis.</p>

<p>All in all, I’m grateful for all I have, my wife and daugher, friends, family. In 2024 I want to free up more of my time so I can spend more quality time with them.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[💡 “Being a parent is having a job where you’re on call 24/7/365 with an abusive boss who screams at your and can’t tell you what he wants. The best part is, you’re gonna love it.”]]></summary></entry><entry><title type="html">Overseas travel with a baby, for dummies</title><link href="https://felipe.lima.gl/2023/09/23/overseas-travel-with-baby.html" rel="alternate" type="text/html" title="Overseas travel with a baby, for dummies" /><published>2023-09-23T10:31:00+00:00</published><updated>2023-09-23T10:31:00+00:00</updated><id>https://felipe.lima.gl/2023/09/23/overseas-travel-with-baby</id><content type="html" xml:base="https://felipe.lima.gl/2023/09/23/overseas-travel-with-baby.html"><![CDATA[<h2 id="preface">Preface</h2>

<p>A few weeks ago my wife, baby and I took on the challenge of flying all the way from Seattle, WA to Porto Alegre, Brazil (my hometown). This is a trip that I (sometimes we) have done many times over the past few years, but never with a baby. Travelling with a baby proved to be a much more challenging experience than by myself or just the two of us, so I thought I’d describe some of the challenges and approaches we took to fight this beast.</p>

<p>Flying from Seattle to Brazil turns out to be a lot harder than it should be. As far as I can tell, there are no direct flights from Seattle to anywhere in Brazil! Some of the other options are LAX (Los Angeles), IAH (Houston), ATL (Atlanta), but my go-to tends to be MIA (Miami), due to its geographical location, which makes it a good jumping off point to Central and South America, plus there are some relatively cheap Copa flights from there. The best route I could find over the years is SEA → MIA → PTY → POA, which combines lowest cost, shortest duration and least number of stops. I usually spend a night in Miami to soften the blow, which makes the whole experience a loss less miserable for me.</p>

<p>Unfortunately, the flying experience has been and continues to be mostly exhausting at best and infuriating and depressing at worst. This has been the case for me for the past 10+ years with no signs of improvement. Getting TSA pre-check did make going through security a bit less painful, so I’d strongly recommend that. Sadly, it only works in US airports though. I haven’t looked closely into stuff like Clear or Global Entry yet, but I’m still planning to.</p>

<p>For frequent flyers like myself, I’d also recommend getting a credit card that allows access to airport lounges. My credit card (Chase Sapphire Reserve) includes Priority Pass, which is not amazing, but has saved my butt a few times.</p>

<p>Anyways, for this particular trip, we decided to spend a couple of nights in Miami for the first leg of the trip to acclimate to the new timezone, weather, rest a bit and relax. I would <strong>highly highly</strong> recommend that to anyone who can afford the extra time in transit and also afford accommodations in Miami, which can get expensive depending on how much comfort you want, location, etc.</p>

<p>We rented an Airbnb on North Beach, which is less busy (when compared to South Beach) and we enjoy being close to the beach. Unfortunately, there was a storm passing by and it rained a lot, so we couldn’t enjoy the beach really. Still, it was great to give baby (and ourselves) a break from flights and airport, to rest and decompress.</p>

<p>Baby did actually surprisingly well for the first SEA → MIA leg, which is about 5 hours long. She mostly slept throughout the flight, with some playing in between. We booked an extra seat for her (middle seat between us) which I would highly highly recommend (again, if you can afford the cost). We buckled the car seat to the flight seat and it was smooth sailing, pretty comfortable for baby and ourselves.</p>

<p>Another decision that turned out to be the right one, was bringing along a portable bassinet. We have a <a href="https://www.bugaboo.com/us-en/play-yard/">travel friendly Bugaboo</a> that’s light enough and we checked it as an extra bag.</p>

<p>For the 2nd leg, MIA → PTY (Panama City), that’s when things started to go wrong. This was supposed to be a pretty short flight, only about 3 hours, but we spent just as much time sitting in the aircraft at the gate, waiting to depart. No one said anything about why it was delayed or what was happening, which made it worse. The crew just apologized later and that was it. Anyways, the problem was that our layover in PTY was barely 2 hours long, so the 3 hour delay meant we missed our connecting flght. When we landed in Panama City, it has just departed a few minutes earlier. 😟</p>

<p>So, there we were in the PTY airport, hungry and tired, with a baby and not knowing how to get home. Luckily my wife had the idea of bringing a carrier with her in the flight, those “kangaroo style”, similar to an <a href="https://ergobaby.com">Ergobaby</a>, which is great, that you strap to your chest, which was another life saver. Baby slept a lot on that, while we waited for the Copa staff to sort out new flights for a big group of angry Brazilians. Turns out there is only one PTY → POA flight per day, so we’d have to spend the night in Panama City and stay at a hotel until the next day, when we could take the next flight home. I knew this would happen, so it was barely a surprise, just another drop in the frustration bucket.</p>

<p>Copa gave us a voucher to a <a href="https://maps.app.goo.gl/CB8kPvJtM9jY28eP6">hotel</a> and charted a (mini) bus to take everyone there. On top of that, they also lost our baby’s car seat which I had checked at the gate in MIA, so I didn’t have a checked bag receipt for it. I filed a complaint to the staff at the airport but they had no idea where it was (more on that later).</p>

<p>At that point we were exhausted and I was mentally and physically drained. We grabbed a bag and took the “bus” to the hotel with the other affected passengers.</p>

<p>It was comically sad, the bus was tiny and some people travelled standing, while the driver was on his phone and my wife was feeding the baby. It felt like one of those surreal experiences that you have to just laugh at, so you won’t cry.</p>

<p><img src="/images/2023/09/panama-selfie.png" alt="Panama bus selfie" /></p>

<p>Anyways, we arrived at the hotel, ate and passed out. I should probably also mention there were bugs (mini cockroaches) in our hotel room. Not one, but <strong>several</strong>. One of them was on the bed 😨 Yup… Thankfully we were just too tired to care at that point and fell back asleep. Onto the next (and final) day.</p>

<p>We didn’t have a separate seat for baby for the Copa flights and that’s a decision I regret taking. Infants 2 years old or younger can fly as “infant on lap” for no extra cost. You’ll save some money but it will be a lot less comfortable than having a separate seat. I was hoping the aircraft would have baby bassinets at the bulkhead seats, but unfortunately they were not available. As far as I could tell, It doesn’t seem possible to know up front (eg.: at booking time) whether or not an on-board bassinet will be available, so it’s probably best to just not count on it.</p>

<p>Another learning was feeding baby during the flight. We brought bottles with breast milk, which are allowed to go through security. At MIA, the airport staff checked it thoroughly. On other airports, though, they didn’t seem to care about it at all, didn’t even look. If you do this, make sure you bring ice packs as well to keep the milk cool for the duration of the flight. We also had a bottle of liquid formula as a backup plan, which came in handy.</p>

<p>Onto our final flight leg, it was pretty uneventful, thankfully. Another six ish hours of flight time, but it went OK. I couldn’t believe when we landed safely in Brazil that we actually completed this journey successfully, or almost. We still had to recover our car seat with Copa. Luckily, they ended up finding it after a few days of intense calls to customer service, complaining on Twitter (err.. X) and filing a complaint.</p>

<p>Phew, what a journey. I hope this helps you if you’re going through a similar trip and feel overwhelmed not knowing what to do. I feel your pain 🙂. If you have any other learnings or corrections you’d recommend, please do not hesitate to contact me with that.</p>

<p>Good luck! ✌️</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Preface]]></summary></entry><entry><title type="html">Domain names and branding</title><link href="https://felipe.lima.gl/2023/05/13/moving-to-lima-gl.html" rel="alternate" type="text/html" title="Domain names and branding" /><published>2023-05-13T10:31:00+00:00</published><updated>2023-05-13T10:31:00+00:00</updated><id>https://felipe.lima.gl/2023/05/13/moving-to-lima-gl</id><content type="html" xml:base="https://felipe.lima.gl/2023/05/13/moving-to-lima-gl.html"><![CDATA[<h1 id="some-history">Some History</h1>

<p>I’ve owned the domain <a href="http://felipecsl.com">felipecsl.com</a> since 2012. Hard to believe it’s been 13 years now. Before then,
I’ve had <a href="http://felipel.com">felipel.com</a>, which I registered back in 2009!</p>

<p>Even though <code class="language-plaintext highlighter-rouge">felipecsl</code> is longer and harder to spell than <code class="language-plaintext highlighter-rouge">felipel</code>, that has been my universal handle pretty much
everywhere in the internet, so I thought it made sense for my personal website to match that because… well,
<a href="https://felipe.lima.gl/2020/04/12/consistency.html">consistency</a>. 🙂</p>

<p>Looking back through my old emails, finding the domain registration order confirmation from GoDaddy, it’s kind of hilarious
to see how their designs and branding has changed dramatically.</p>

<p><img src="/images/2023/05/godaddy-email-1.png" alt="GoDaddy email 1" /></p>

<p><img src="/images/2023/05/godaddy-email-2.png" alt="GoDaddy email 2" /></p>

<p>As an aside, I’ve since stopped using GoDaddy as my go-to registrar, after learning about their insane CEO <a href="https://en.wikipedia.org/wiki/Bob_Parsons">Bob Parsons</a>
who was at the time seen shooting elephants in Africa and making sexist remarks. It’s really not that surprising, after
looking at his company email designs above. Also not surprising they changed their branding so dramatically.</p>

<hr />

<p><br />
Well, enough said, it was time for a change. After getting married last July and now becoming a father, I started thinking 
about how I could create something larger than myself, some kind of family presence, name and branding that could potentially 
outlive me. I know… I’m getting old, but so does everyone else. 😀</p>

<p>Having absolutely zero experience with branding, logo design and the likes, I proceeded to do what any perfectly reasonable
person would do in this situation: Go do it anyways. 😂</p>

<p><strong>Hint</strong>: I have no idea what I’m doing.</p>

<h2 id="ideation">Ideation</h2>

<p>I started doodling with ideas that would join the letters L and G together, representing my last name “Lima” and my wife’s
last name, “Gall”.</p>

<p><img src="/images/2023/05/ideation-1.png" alt="Logo ideation 1" /></p>

<p>If you’re a person with training on this, or who has just the slightest eye for good design, I’m sure you’re cringing as
you look at these. That’s OK. Some of these even look like a wheelchair shaped logo, which is kind of hilarious I think.
Needless to say, not exactly what I was going for here. Anyways, a few months later this idea kept evolving into the
next iteration:</p>

<p><img src="/images/2023/05/ideation-2.png" alt="Logo ideation 2" /></p>

<p>I like this concept a lot better as it uses more angled shapes that remind me of an arrow. It also merges both letters
together nicely in a visually pleasant and balanced equilibrium. I liked where this was going, so I opened up Figma and
started iterating there. I played around with it some more and eventually ended up settling on this:</p>

<p><img src="/images/2023/05/final-logo.png" alt="Final logo" /></p>

<p>I really like the symmetrical angles and the rhombus shaped layout on this one. It’s simple, clean and has a nice flow to it.</p>

<h1 id="finding-a-domain-name">Finding a domain name</h1>

<p>Having a pretty short last name is both a blessing and a curse, especially when it comes to finding a domain name.
I wanted to go with something short and easy to remember, so I started looking for domains that were an exact match for
my last name “Lima”.</p>

<p>I had to quickly abandon the idea of getting anything that resembles a popular TLD like <code class="language-plaintext highlighter-rouge">.com</code>, <code class="language-plaintext highlighter-rouge">.io</code>, <code class="language-plaintext highlighter-rouge">.dev</code>, etc.
Some of these were going for 5+ figures on the secondary market, which is just insane. Being as cheap as I am, I was not
willing to shell out that much money for a domain name. Browsing available domain names turned out to be an adventure itself.
Most registrars only support a fairly small subset of the almost <a href="https://textslashplain.com/2023/05/13/new-tlds-not-bad-actually/">1500 TLDs</a>
available today, so I had to go through a few different websites to get a picture of what was available.</p>

<p>After spending a completely unreasonable amount of time digging into this, the best registrar websites I could find for
searching were <a href="https://101domain.com">101domain.com</a> and <a href="https://marcaria.com">Marcaria</a> (despite its awful 1990 looking design,
it has a pretty good variety of TLDs with decent prices).</p>

<p>I also wrote a small Ruby script that would go through the list of <a href="https://data.iana.org/TLD/tlds-alpha-by-domain.txt">every TLD available</a>
on the ICANN website and <code class="language-plaintext highlighter-rouge">whois</code> each one of them to see if it was available. This was a fun exercise and helped me
filter down the list of available TLDs to a more manageable number.</p>

<p>Once I found some TLDs I liked, I went usually to Marcaria to get a sense for how expensive they were. After <strong>a lot</strong>
of filtering and pondering, I ended up finally going with <a href="https://lima.gl">lima.gl</a> as the new domain name, bought at
<a href="https://gandi.net/">gandi.net</a> which had a decent price for it.</p>

<p><strong>Note</strong>: I have no affiliation whatsoever with 101domain, Marcaria, GoDaddy or Gandi.</p>

<p>My main reason for going with <code class="language-plaintext highlighter-rouge">.gl</code> was that, since “Gall” is my wife’s last name, “gl” is a nice way to represent that, plus:</p>

<ul>
  <li>GL is the TLD for Greenland which is cool 😃</li>
  <li>GL is internet slang for “good luck” which is also cool</li>
</ul>

<h1 id="moving-to-limagl">Moving to lima.gl</h1>

<p>I’ve been using <a href="https://pages.github.com/">GitHub Pages</a> for hosting my personal website for a while now. It’s great
if you’re well versed with Github and Git, and it’s free. I’ve been also using <a href="https://jekyllrb.com/">Jekyll</a> as the static
site generator, which is also pretty good.</p>

<p>Now I’m going back to good ol’ <a href="rubyonrails.org">Rails</a> for this new website, because I’m a masochist and I like to do
things the hard way. (This sentence was brought to you by Github Copilot AI’s sense of humor. Not bad 😂)</p>

<p>In order to bridge that gap between Jekyll and Rails, I ended up bridging the Jekyll website to Rails using a Rack Application.
The code is fairly straightforward actually (Ruby types thanks to <a href="https://sorbet.org">sorbet</a>):</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># /app/lib/static_blog_application.rb</span>
<span class="c1"># frozen_string_literal: true</span>
<span class="c1"># typed: strict</span>

<span class="c1"># A Rack application that routes requests to static files in a directory on the filesystem.</span>
<span class="k">class</span> <span class="nc">StaticBlogApplication</span>
  <span class="kp">extend</span> <span class="no">T</span><span class="o">::</span><span class="no">Sig</span>

  <span class="no">RackEnvironment</span> <span class="o">=</span> <span class="no">T</span><span class="p">.</span><span class="nf">type_alias</span> <span class="p">{</span> <span class="no">T</span><span class="o">::</span><span class="no">Hash</span><span class="p">[</span><span class="no">T</span><span class="p">.</span><span class="nf">untyped</span><span class="p">,</span> <span class="no">T</span><span class="p">.</span><span class="nf">untyped</span><span class="p">]</span> <span class="p">}</span>

  <span class="c1"># @param [String] path_prefix: the path prefix to match on the URL (eg "/blog")</span>
  <span class="c1"># @param [String] dest_path: the path to the static files directory on the filesystem (eg "public/blog")</span>
  <span class="n">sig</span> <span class="p">{</span> <span class="n">params</span><span class="p">(</span><span class="ss">path_prefix: </span><span class="no">String</span><span class="p">,</span> <span class="ss">dest_path: </span><span class="no">String</span><span class="p">).</span><span class="nf">void</span> <span class="p">}</span>
  <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">path_prefix</span><span class="p">:,</span> <span class="n">dest_path</span><span class="p">:)</span>
    <span class="vi">@path_prefix</span> <span class="o">=</span> <span class="no">T</span><span class="p">.</span><span class="nf">let</span><span class="p">(</span><span class="n">path_prefix</span><span class="p">,</span> <span class="no">String</span><span class="p">)</span>
    <span class="vi">@dest_path</span> <span class="o">=</span> <span class="no">T</span><span class="p">.</span><span class="nf">let</span><span class="p">(</span><span class="n">dest_path</span><span class="p">,</span> <span class="no">String</span><span class="p">)</span>
    <span class="vi">@backend</span> <span class="o">=</span> <span class="no">T</span><span class="p">.</span><span class="nf">let</span><span class="p">(</span><span class="no">Rack</span><span class="o">::</span><span class="no">Files</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="vi">@dest_path</span><span class="p">),</span> <span class="no">Rack</span><span class="o">::</span><span class="no">Files</span><span class="p">)</span>
  <span class="k">end</span>

  <span class="n">sig</span> <span class="p">{</span> <span class="n">params</span><span class="p">(</span><span class="ss">env: </span><span class="no">RackEnvironment</span><span class="p">).</span><span class="nf">returns</span><span class="p">(</span><span class="no">T</span><span class="o">::</span><span class="no">Array</span><span class="p">[</span><span class="no">T</span><span class="p">.</span><span class="nf">untyped</span><span class="p">])</span> <span class="p">}</span>
  <span class="k">def</span> <span class="nf">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
    <span class="n">env</span><span class="p">[</span><span class="s2">"PATH_INFO"</span><span class="p">]</span> <span class="o">=</span> <span class="n">path_info</span><span class="p">(</span><span class="n">env</span><span class="p">).</span><span class="nf">sub</span><span class="p">(</span><span class="vi">@path_prefix</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">path_info</span><span class="p">(</span><span class="n">env</span><span class="p">).</span><span class="nf">empty?</span> <span class="o">||</span> <span class="n">path_info</span><span class="p">(</span><span class="n">env</span><span class="p">).</span><span class="nf">end_with?</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
      <span class="n">env</span><span class="p">[</span><span class="s2">"PATH_INFO"</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"index.html"</span>
    <span class="k">end</span>
    <span class="n">response</span> <span class="o">=</span> <span class="vi">@backend</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">response</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">404</span>
      <span class="c1"># if we failed to find a matching file (eg when PATH_INFO doesn't end with '/'), try index.html before giving up</span>
      <span class="n">env</span><span class="p">[</span><span class="s2">"PATH_INFO"</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">"/index.html"</span>
      <span class="vi">@backend</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
    <span class="k">else</span>
      <span class="n">response</span>
    <span class="k">end</span>
  <span class="k">end</span>

  <span class="kp">private</span>

  <span class="n">sig</span> <span class="p">{</span> <span class="n">params</span><span class="p">(</span><span class="ss">env: </span><span class="no">RackEnvironment</span><span class="p">).</span><span class="nf">returns</span><span class="p">(</span><span class="no">String</span><span class="p">)</span> <span class="p">}</span>
  <span class="k">def</span> <span class="nf">path_info</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
    <span class="n">env</span><span class="p">[</span><span class="s2">"PATH_INFO"</span><span class="p">]</span>
  <span class="k">end</span>
<span class="k">end</span>
</code></pre></div></div>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># /config/routes.rb</span>
<span class="n">match</span><span class="p">(</span>
  <span class="s1">'(/*path)'</span><span class="p">,</span>
  <span class="ss">to: </span><span class="no">StaticBlogApplication</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span>
    <span class="ss">path_prefix: </span><span class="s2">""</span><span class="p">,</span>
    <span class="ss">dest_path: </span><span class="s1">'public/felipecsl/'</span>
  <span class="p">),</span>
  <span class="ss">via: :all</span><span class="p">,</span>
  <span class="ss">constraints: </span><span class="p">{</span> <span class="ss">subdomain: </span><span class="s1">'felipe'</span> <span class="p">}</span>
<span class="p">)</span>
</code></pre></div></div>

<p>With this setup, I can map the subdomain <code class="language-plaintext highlighter-rouge">felipe.lima.gl</code> to the path <code class="language-plaintext highlighter-rouge">public/felipecsl</code>, which is where the Jekyll blog
files are generated. Then, to tie it all up together, build the blog with <code class="language-plaintext highlighter-rouge">bundle exec jekyll build -s felipecsl</code>.
You’ll also need to set <code class="language-plaintext highlighter-rouge">destination: public/felipecsl</code> in the Jekyll config file <code class="language-plaintext highlighter-rouge">_config.yml</code>. That’s it!</p>

<p>Anyways, I’m still working on the migration and setting things up on the new domain. This article is just the first step.
As I dug into this logo ideation rabbit hole I started diving deeper into 3D frameworks, Three.js, shaders, GLSL, etc.,
but that’s a topic for another article. I made a simple 3D rendering at <a href="https://lima.gl">lima.gl</a> wich you can play
with in the meantime.</p>

<p><img src="/images/2023/05/logo-3d.png" alt="logo 3d" /></p>

<p>✌️ thanks for reading!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Some History]]></summary></entry><entry><title type="html">2022 Annual Review</title><link href="https://felipe.lima.gl/2023/01/13/2022-annual-review.html" rel="alternate" type="text/html" title="2022 Annual Review" /><published>2023-01-13T10:31:00+00:00</published><updated>2023-01-13T10:31:00+00:00</updated><id>https://felipe.lima.gl/2023/01/13/2022-annual-review</id><content type="html" xml:base="https://felipe.lima.gl/2023/01/13/2022-annual-review.html"><![CDATA[<h2 id="summary">Summary</h2>

<p>This year’s annual review, AKA retrospective, came in a bit later, but nevertheless, better later than never.
This time, I decided to follow Farnam Street’s awesome <a href="https://fs.blog/annual-review/">Annual Review</a>
format to guide my thinking and I found it to be an awesome framework for conducting this kind of reflection.
Also, looking back to <a href="https://felipecsl.com/2021/12/05/2021-retrospective.html">previews reviews</a> helped
me see how things evolved in my life.</p>

<p>2022 was marked by several meaningful changes, including quitting my job, taking another break from work,
getting married and having a baby! It wasn’t all roses though.</p>

<p>While (f)unemployed, I struggled with lack of focus and self-doubt. Knowing that the family is growing,
I felt an increased (self imposed) pressure to be employed and have a steady source of income, especially during the
unprecedented negative financial and economic conditions that permeated the past 12 months globally.</p>

<h2 id="highlights-️">Highlights ☀️</h2>

<ul>
  <li>I got married in July <em>and</em> am becoming a father! 👶</li>
  <li>Had an amazing experience traveling to Doha in Qatar for the World Cup! ⚽</li>
  <li>Spent one month traveling around Portugal with my wife!</li>
  <li><a href="https://felipecsl.com/2022/08/27/a-new-beginning.html">Quit my job at QuickNode</a> and have been taking some time off from work since August</li>
  <li>Learned a lot about trading and macroeconomics</li>
  <li>Improved at bouldering 🧗</li>
  <li>Started meditating semi-regularly</li>
</ul>

<h2 id="lowlights-️">Lowlights ⛈️</h2>

<ul>
  <li>Recurring family health issues have made my life more chaotic than I’d have liked</li>
  <li>Haven’t played soccer much and, when I did, I got injured</li>
  <li>Broad economy and market downturn, uncertainty, layoffs, high inflation. 2022 was an unusually bad year for investors (including myself)</li>
  <li>War in Ukraine 😢</li>
  <li>Struggled to find product-market fit, market and monetize <a href="https://huskly.finance/">Huskly</a></li>
  <li>Struggled more than usual with lack of focus and too many distractions</li>
</ul>

<h2 id="favorite-books-i-read-">Favorite books I read 📚</h2>

<ul>
  <li><a href="https://www.amazon.com/Changing-World-Order-Nations-Succeed/dp/1982160276">Principles for Dealing with the Changing World Order: Why Nations Succeed and Fail - Ray Dalio</a></li>
  <li><a href="https://www.ynharari.com/book/homo-deus/">Homo Deus: A Brief History of Tomorrow - Yuval Noah Harari</a></li>
</ul>

<h2 id="favorite-quotes-">Favorite quotes 💭</h2>

<ul>
  <li><em>“I’m not upset that you lied to me, I’m upset that from now on I can’t believe you.” – Friedrich Nietzsche</em></li>
  <li><em>“So much advantage in life comes from being willing to look like an idiot over the short term.”</em></li>
  <li><em>“Instead of ‘why the addiction’, ask ‘why the pain?’”</em> - Dr. Gabor Mate</li>
  <li><em>“When we are no longer able to change a situation, we are challenged to change ourselves.” — Viktor Frankl</em></li>
</ul>

<h2 id="questions-to-ponder-">Questions to ponder 🤔</h2>

<ul>
  <li>How do you know that you’re in the good ol’ days?</li>
</ul>

<h2 id="most-interesting-things-i-came-across">Most interesting things I came across</h2>

<ul>
  <li><a href="https://lukeburgis.com/mimetic-desire/">Theory of Mimetic Desire</a> - Luke Arthur</li>
  <li><a href="https://www.merriam-webster.com/dictionary/apophenia">Apophenia</a> - the tendency to perceive a connection or meaningful pattern between unrelated or random things (such as objects or ideas)</li>
  <li><a href="https://www.linkedin.com/pulse/high-agency-its-importance-how-cultivate-shreyas-doshi/">High Agency</a> - Shreayas Doshi</li>
  <li><a href="https://threadreaderapp.com/thread/1562078782453792768.html">Debt Spiral</a> - James Lavish</li>
  <li><a href="https://www.lambrospetrou.com/articles/bits-of-unsolicited-advice-kevin-kelly/">68 bits of unsolicited advice</a> - Kevin Kelly</li>
</ul>

<p>I’m optimistic about 2023, and I do think it will be a better year now that Covid is behind us and the
worst of the bear market is also over. With US interest rate increases tapering off soon, risk assets
will start growing again, including crypto. With more liquidity flowing into the system, companies won’t
have go through more layoffs and the entire industry will thrive again. At least until the end of the
next cycle, when inflation comes back and we start all over again until everything blows up to space 🙂</p>

<p>Alright that was it for my annual review. I hope you enjoyed reading and that you have a great 2023!</p>

<p>✌️</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Summary]]></summary></entry><entry><title type="html">Tolerance</title><link href="https://felipe.lima.gl/2022/11/06/tolerance.html" rel="alternate" type="text/html" title="Tolerance" /><published>2022-11-06T10:31:00+00:00</published><updated>2022-11-06T10:31:00+00:00</updated><id>https://felipe.lima.gl/2022/11/06/tolerance</id><content type="html" xml:base="https://felipe.lima.gl/2022/11/06/tolerance.html"><![CDATA[<p><img src="/images/2022/11/ye.webp" alt="Ye" title="Ye" /></p>

<p>The other day while browsing YouTube aimlessly I ran into this <a href="https://www.youtube.com/shorts/LuPXYs6R9qg">short and fairly heated clip</a> from Lex Friedman’s recent interview with Kanye “Ye” West. I was really taken aback by that and decided to dig in. If you haven’t watched that <a href="https://www.youtube.com/watch?v=4AWLcxTGZPA&amp;t=1s">interview</a>, I’d strongly recommend you go ahead and watch it now. It’s a fascinating conversation and I think it’s worth your time.</p>

<p>As an avid podcast consumer, I’ve recently become a big fan of Lex’s interviews, he struck me as a very thoughtful, intelligent and rational interviewer whose views often resonate with me. As someone who thinks like a scientist and as an engineer (as Ye himself mentioned several times), Lex is a fantastic podcast host. So, I decided to learn more and spent the next two hours listening to what “Ye” had to say. Lex manages this tough conversation very skillfully,
it’s certainly no easy feat.</p>

<p>I’ll confess I’ve never paid attention to pop culture and couldn’t care less about what the latest artists and celebrities are up to or babbling about on social media. Because of that, I was mostly unaware of Ye’s recent <a href="https://www.adl.org/resources/blog/unpacking-kanye-wests-antisemitic-remarks">antisemitic comments on Twitter</a>. This interview made me dig into that rabbit hole, which was pretty shocking, to say the least.</p>

<h2 id="the-first-shock">The first shock</h2>

<p>A few minutes into that interview and I couldn’t believe what I was watching. As someone brilliantly put in the comments section, <em>“Listening to ye is like trying to explain a dream you just woke up from”.</em> It really sounded to me like a blob of completely disjoint and nonsensical ideas. My main takeaway halfway through the interview was that 1. Ye’s got some serious mental health issues and 2. I got deep respect for Lex’s ability to remain calm and in control of the situation, especially as a jew, being constantly attacked by Ye with accusative remarks against the jewish people in general.</p>

<p>I’m not gonna get hung up on Ye’s antisemitic remarks because I don’t claim to understand this deeply complicated and sensitive topic. Instead, I wanna step back and focus on the second order consequences of someone as famous and influential as him behaving as a madman who promotes this sort hate speech and divisiveness.</p>

<h2 id="going-deeper-into-the-rabbit-hole">Going deeper into the rabbit hole</h2>

<p>While reading the comments section, in disbelief, after finishing this interview, I saw someone pointed to this <a href="https://www.youtube.com/watch?v=IUIErvCujzc">Valuetainment interview with Antonio Brown</a> (none of which I knew beforehand) as another great example of skilful interviewers who manage to deal with a volatile and unstable guest. Coincidence or not, I learn that Antonio Brown (”AB”) is friends with Ye and his interview is even more wild and unbelievable, to the point of him being utterly disrespectful with the hosts.</p>

<p>“AB” refuses to answer any questions for almost an hour and acts in an extreme defensive, condescending and even hostile way towards very calm and patient hosts. It becomes very clear though that their patience is draining quickly and a few times they propose just ending the “conversation” early because it wasn’t really going anywhere. I’d probably have done that myself if in their shoes. It was just depressing and painful for me to watch.</p>

<h2 id="why-all-this-nonsense">Why all this nonsense</h2>

<p>One would be naive to conclude that this is just their personalities and they are just voicing who they are in an authentic way. People like Ye and AB (and any other “pop celebrity”, for that matter), feed on attention. They need clicks, eyeballs, comments, media coverage, etc. They are addicted to it, they thrive in polemic and drama. Elon and Trump are other great examples of that.</p>

<p>Instead, the way I see it, is these are just actors, clowns. They are putting on a big show in a contest to see who gets the most views, likes, clicks, retweets, etc. This is the result of the current set of incentives that reward this type of behavior. Unfortunately, <strong>we</strong> (and that includes myself, since I’m calling attention to these people) are part of the problem.</p>

<h2 id="the-bottom-line">The bottom line</h2>

<p>Unfortunately, humans naturally seek drama, polemic, conspiracy theories, mad, extreme and erratic personalities, discord and that ultimately leads to hate and divisiveness. The examples are endless: Ye, Elon, Trump QAnon, etc. We feed this feedback loop, powered by the internet and social media, which rewards the most extreme views and biggest egos. Its a sad state of affairs, but now I understand that everyone’s part of the problem.</p>

<p>We can’t simply blame “them”. The problem is “us”, and that includes <em>all of us</em>. We feed this loop with clicks, views, comments, likes and retweets until the issue becomes too big to ignore.</p>

<p>With Elon’s recent acquisition of Twitter and the whole free speech thing, I’m often reminded of the <a href="https://en.wikipedia.org/wiki/Paradox_of_tolerance">Paradox of tolerance</a>, which is extremely relevant nowadays.</p>

<blockquote>
  <p><em>“If a society is tolerant without limit, its ability to be tolerant is eventually seized or destroyed by the intolerant” - <a href="https://en.wikipedia.org/wiki/Paradox_of_tolerance">Wikipedia</a></em></p>
</blockquote>

<p>I wish we had more people like Lex who will go against the grain and push back on this kind of behavior, calling people out on their bullshit.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Hello Huskly 🐺</title><link href="https://felipe.lima.gl/2022/09/14/hello-huskly.html" rel="alternate" type="text/html" title="Hello Huskly 🐺" /><published>2022-09-14T09:23:00+00:00</published><updated>2022-09-14T09:23:00+00:00</updated><id>https://felipe.lima.gl/2022/09/14/hello-huskly</id><content type="html" xml:base="https://felipe.lima.gl/2022/09/14/hello-huskly.html"><![CDATA[<p>Today I start building <a href="https://huskly.finance">Huskly Finance</a> in public. This is something I’ve been
quietly working on during my free time, just as a hobby, for the past couple of years. The project
started as “stocks.dog” but I’ve since rebranded since that name was temporary and mostly just playful
and inaccurate. I’ve been building it just for myself since it helped me better understand how I was
doing as a trader, which is a skill I’ve gotten more serious about learning and improving since the
Covid pandemic started.</p>

<p>Turns out that being a profitable trader is hard. Really hard. I know, quite obvious. This should be
no surprise to anyone, but I decided to learn it the hard way, as I usually do. As I started tracking
my progress more closely with Huskly, I could clearly see which trades worked well and which ones
didn’t. That allowed me to improve my process and have more rigor, keeping myself accountable. As
the saying goes, “what gets measured gets managed”.</p>

<p><img src="/images/2022/09/huskly-pnl.png" alt="Huskly PnL" title="Huskly PnL chart" /></p>

<p>As this project grew, I started wondering whether other traders could benefit from it and be willing
to pay for it. I still don’t know the answer to that question, but I’m willing to find out. If it
turns out that it doesn’t, at least I know I’ll always have at least one user: myself. 🙂</p>

<p>In a nutshell, Huskly connects with your <a href="https://tdameritrade.com/">TD Ameritrade</a> account, which is
the broker I currently use. Your password never hits our servers. Credentials are sent directly to
TDA, which sends us a temporary token (much like a generated one-time password) that allows us to
read your account data using their API on your behalf.</p>

<p>It then imports transaction history daily and reconciles trades, effectively “replaying history” to
figure out what you traded and how much money you made or lost, that is, your P/L. Based on that
information, it generates some fancy charts (like the one above) where you can see your progress over
time, analyze your performance and better understand how you’re doing.</p>

<p>Additionally, there’s a dashboard where you can see your current account positions. It’s focused on
stock options now (which is what I trade mostly), so it shows when it’s in the money, time to expiration,
percent return, etc. I find it quite useful for my own trading so I decided to share this with everyone.</p>

<p><img src="/images/2022/09/huskly-dashboard.png" alt="Huskly Dashboard" title="Huskly dashboard" /></p>

<p>Finally, Huskly can also do charts, with realtime data!</p>

<p><img src="/images/2022/09/huskly-trade-page.png" alt="Huskly Trade Page" title="Huskly trade page" /></p>

<p>Feel free to reach out via email, <a href="https://twitter.com/huskly_finance">Twitter</a> or <a href="https://discord.gg/qpFA4druGB">Discord</a>
if you want to give it a shot. I’be happy to provide access to anyone willing to provide feedback in
return 😃 It will be most useful if you have a TD Ameritrade account, though.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Today I start building Huskly Finance in public. This is something I’ve been quietly working on during my free time, just as a hobby, for the past couple of years. The project started as “stocks.dog” but I’ve since rebranded since that name was temporary and mostly just playful and inaccurate. I’ve been building it just for myself since it helped me better understand how I was doing as a trader, which is a skill I’ve gotten more serious about learning and improving since the Covid pandemic started.]]></summary></entry></feed>