<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>simpixelated.com</title>
  <subtitle>JavaScript software development tips, strategies for salary negotiation, and other helpful advice for navigating software as a career.</subtitle>
  <link href="https://simpixelated.com/feed.xml" rel="self" />
  <link href="https://simpixelated.com/" />
  <updated>2025-03-19T00:00:00Z</updated>
  <id>https://simpixelated.com/</id>
  <author>
    <name>Jordan Kohl</name>
  </author>
  <entry>
    <title>Should Carmel cap single-family rentals?</title>
    <link href="https://simpixelated.com/should-carmel-cap-single-family-rentals/" />
    <updated>2025-03-19T00:00:00Z</updated>
    <id>https://simpixelated.com/should-carmel-cap-single-family-rentals/</id>
    <content type="html">&lt;p&gt;Fishers, a nearby city in Indiana, is considering a &lt;a href=&quot;https://fishersin.gov/government/administrative/rental-registration-permitting-program/&quot;&gt;ban on new rental properties&lt;/a&gt; beyond 10% in each subdivision. According to one of my city’s &lt;a href=&quot;https://www.carmel.in.gov/government/city-council/jeff-worrell&quot;&gt;council-members&lt;/a&gt;, residents in Carmel are also asking for a similar policy. Frankly I&#39;m disturbed at this idea and I emailed them to say as much. If the goal of such a policy is to alleviate our housing affordability crisis, then it will be ineffective at best and counterproductive and discriminatory at worst. Artificially limiting rental housing supply will only put upward pressure on rents, as it does nothing to reduce demand.&lt;/p&gt;
&lt;h2&gt;What is the intent of the proposal?&lt;/h2&gt;
&lt;p&gt;This ordinance is framed as a response to the housing affordability crisis which is exacerbated by corporate investors buying up houses to turn into rentals. A &lt;a href=&quot;https://www.fhcci.org/wp-content/uploads/2025/01/FHCCI-SFR-Investor-Update-1-9-25.pdf&quot;&gt;recent report&lt;/a&gt; by the Fair Housing Center of Central Indiana (FHCCI) claims that “Investors own between 4-7% of all single-family homes” in Marion and the four surrounding counties: Hamilton, Hancock, Hendricks, and Johnson. That may not seem like much, but with only 10% of Hamilton County homes for rent, nearly half of those are investor-owned.&lt;/p&gt;
&lt;p&gt;I’m sympathetic to the idea of limiting corporate greed and I wouldn’t shed a tear for the investors that might be turned away by this policy. Unfortunately, there’s nothing in this ordinance that targets corporations specifically. What&#39;s proposed is a broad ban on rentals above an arbitrary threshold (which we’ve already reached in Hamilton County), regardless of whether it’s a local resident owner or a corporate out-of-state investor.&lt;/p&gt;
&lt;p&gt;I recognize there are limits to what city councils can do and a law specifically targeting corporations might require legislation at the state or federal level. If that’s true, then republican city council members and other representatives in Hamilton County should be pushing their colleagues to create and support that kind of legislation. There have been multiple bills aimed at limiting corporate investment in single-family homes in &lt;a href=&quot;https://www.legislature.ohio.gov/legislation/legislation-summary?id=GA134-SB-334&quot;&gt;Ohio&lt;/a&gt;, &lt;a href=&quot;https://legiscan.com/CA/text/AB2584/2023&quot;&gt;California&lt;/a&gt;, &lt;a href=&quot;https://finance-commerce.com/2024/02/first-in-nation-bill-seeks-to-ban-corporations-from-buying-single-family-homes/&quot;&gt;Nebraska&lt;/a&gt;, &lt;a href=&quot;https://patch.com/minnesota/saintpaul/mn-bill-bans-corporations-buying-homes-rent-out&quot;&gt;Minnesota&lt;/a&gt;, and at the &lt;a href=&quot;https://www.nytimes.com/2023/12/06/realestate/wall-street-housing-market.html&quot;&gt;federal&lt;/a&gt; level.&lt;/p&gt;
&lt;p&gt;The difference with those proposals is they protect tenants and individual owners while targeting corporate investors. For example, the &lt;a href=&quot;https://www.route-fifty.com/infrastructure/2022/07/while-investors-are-snatching-homes-governments-fight-save-properties-residents/368927/&quot;&gt;Ohio bill&lt;/a&gt; would: “impose a 45-day waiting period once a private investment firm offers the highest bid on a rental property in foreclosure. During that time, the tenants, if they can match the bid and agree to live in the home for one year, may buy the property. Also during that window, another buyer—an individual who promises to live there for a year and offers more than the winning bid, or a nonprofit af fordable housing group—may buy it.” Legislation like this prevents turning would-be renters into collateral damage.&lt;/p&gt;
&lt;h3&gt;Protecting property values and neighborhood “character”&lt;/h3&gt;
&lt;p&gt;While it’s being claimed the intent of this ordinance is to limit corporate investment, I think there are ulterior motives, which were highlighted in a recent &lt;a href=&quot;https://www.indystar.com/story/news/local/hamilton-county/fishers/2025/02/25/indiana-city-fights-wall-street-landlords-new-law-rentals-tenants-renting-fishers-housing/80259722007/&quot;&gt;IndyStar article&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many homeowners worry investors are concerned only with collecting rent and not with maintaining homes&#39; quality, dragging down property values across the neighborhood […] (Investors&#39;) properties are not well-maintained. The HOA cannot get a hold of anybody. There are more rules violations. The owners are not involved in the community.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The key phrase here is “dragging down property values”. While I’m certain that investors do not want to be “involved in the community” and plan to do the minimum maintenance, at best, we should remember that ultimately it’s just people living in these homes, not corporations. Our local government should be more concerned about protecting tenants than property values. The actual wording of the ordinance makes this intent explicit:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://simpixelated.com/should-carmel-cap-single-family-rentals/hmVga4XTZ3-1882.webp&quot; alt=&quot;Fishers proposed ordinance&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1882&quot; height=&quot;1724&quot;&gt;&lt;/p&gt;
&lt;p&gt;I don’t have to read between the lines to understand that this ordinance proposes to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“protect the character” of the city&lt;/li&gt;
&lt;li&gt;“encourage ownership and the social benefits it brings”&lt;/li&gt;
&lt;li&gt;keep renters in “planned and identified locations”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Apparently the Fishers city council believes that renters are disengaged in civics, uninvested in the community, unhealthy, and more likely to be criminals. At this point, I shouldn’t be surprised that a suburban community in central Indiana is working on further solidifying home ownership as the only means of participating in society. This is a policy that extends HOAs abilities to limit the types of people that can live in their community and makes those restrictions enforceable by city law.&lt;/p&gt;
&lt;p&gt;At a recent &lt;a href=&quot;https://www.youarecurrent.com/2025/03/11/two-rental-cap-meetings-two-different-viewpoints/&quot;&gt;town-hall discussion&lt;/a&gt;, Norma Johnson, a senior citizen, spoke to some of the discriminatory rhetoric being used:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I hear people say they don’t want Fishers to end up like Lawrence. And of course, we know the diversity of Lawrence,” she said. “To me, that’s a way of saying we don’t want ‘those people’ coming in to our community from Indianapolis. I know that’s what they’re thinking when they say something like that. I’m old enough to remember restrictive covenants that they had where Black folks and Jews couldn’t buy homes in certain areas. So, this is just another way of eliminating certain people in their community.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;How can Hamilton County cities solve the root problem?&lt;/h2&gt;
&lt;p&gt;I think investors buying up single family homes is merely a symptom of a larger problem: not enough homes for the amount of people who want to live here. Over &lt;a href=&quot;https://www.indystar.com/story/news/local/hamilton-county/2025/03/14/indiana-population-gains-2024-fastest-growing-communities-hamilton-county-carmel/82363148007/&quot;&gt;7,000 people moved to Hamilton county in 2024&lt;/a&gt; alone, which continues a trend of growth as people move from more expensive parts of the country to central Indiana. Meanwhile, less than 5,000 new homes have been built &lt;em&gt;this decade&lt;/em&gt; according to the &lt;a href=&quot;https://indianahousingdashboard.com&quot;&gt;Indiana Housing Dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A task force within Carmel City Hall spent half of last year determining that: “Carmel and the region does not have enough of the smaller ownership units that are desired by both seniors looking to downsize and young, first-time home buyers.” It&#39;s safe to assume that Fishers is in the same situation, but this ordinance does nothing to address the gap in supply. In fact, it will reduce the already abysmally low supply of rental housing; just 10,000 homes in Hamilton County for a population 330,000 plus.&lt;/p&gt;
&lt;p&gt;While cities may be limited in their power to target corporations, they do wield a huge amount of power over housing supply. If you’re familiar at all with Strong Towns, you know their recommendation for &lt;a href=&quot;https://www.strongtowns.org/housing&quot;&gt;incremental housing&lt;/a&gt;. In Carmel, Fishers, and all over the country, it is illegal to build a duplex, attached townhomes, or even ADUs in most neighborhoods. This next level of gentle density, called the “missing middle”, is exactly what &lt;a href=&quot;https://www.carmel.in.gov/home/showpublisheddocument/22569/638676318201300000&quot;&gt;Carmel’s Housing Task Force recommends&lt;/a&gt; building more of.&lt;/p&gt;
&lt;p&gt;In order to allow that to happen, the city should be looking at relaxing zoning codes and making it easier for small developers to build in existing neighborhoods. I’ve talked about &lt;a href=&quot;https://simpixelated.com/how-to-build-missing-middle-in-carmel/&quot;&gt;the options&lt;/a&gt; before, but I’ll reiterate them here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reduce &lt;a href=&quot;https://parkingreform.org/what-is-parking-reform/&quot;&gt;parking mandates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;reduce &lt;a href=&quot;https://www.mercatus.org/research/policy-briefs/urban-minimum-lot-sizes-their-background-effects-and-avenues-reform&quot;&gt;minimum lot sizes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;allow &lt;a href=&quot;https://www.strongtowns.org/journal/2018/12/12/three-cheers-for-minneapolis-the-3-is-for-triplex&quot;&gt;duplexes and triplexes&lt;/a&gt; in single family zoning&lt;/li&gt;
&lt;li&gt;legalize granny-flats or &lt;a href=&quot;https://www.strongtowns.org/journal/2019/8/21/three-cheers-for-lexingtons-adu-ordinance&quot;&gt;Accessory Dwelling Units&lt;/a&gt; (ADUs)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are proven policies for increasing the supply and affordability of housing, being enacted in places like South Bend, Minneapolis, Lexington, Austin, and others.&lt;/p&gt;
&lt;p&gt;Putting a cap on rentals will work against increasing housing supply. What incentive is there for homeowners to build a granny-flat in their backyard, if they cannot rent it? What incentive will there be for a small developer to build a duplex or triplex in a neighborhood where the cap has been reached? It’s already extremely financially risky, if not impossible, to finance small incremental development projects in places like Fishers and Carmel. The return on investment for multi-family only works out at the scale of subdivisions and large apartment complexes — and even then only with subsidies like &lt;a href=&quot;https://www.choosecarmelin.com/tax-increment-finance&quot;&gt;TIF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This rental cap is likely to kill any future chances of incremental development happening in Fishers. It will further entrench two types of housing as the only ones available:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;single family homes for purchase (if you can afford it)&lt;/li&gt;
&lt;li&gt;investor-owned apartments for everyone else&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I can’t do anything about Fishers, but I definitely plan to fight against this policy if it is proposed in Carmel. As a current renter with a kid and a dog, I appreciate that there are at least some houses available to rent. I want that to remain an affordable option. If I do become a homeowner someday, I want the flexibility of being able to rent out my home if I move away temporarily or want to save the home for my children. I don’t want to be forced to sell the house because too many of my neighbors beat me to renting their house first.&lt;/p&gt;
&lt;p&gt;Have thoughts? &lt;a href=&quot;https://www.reddit.com/r/Carmel/comments/1jfo33d/should_carmel_cap_singlefamily_rentals_fishers_is/&quot;&gt;Continue the conversation on Reddit&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Autumn Greenway</title>
    <link href="https://simpixelated.com/the-autumn-greenway/" />
    <updated>2025-03-05T00:00:00Z</updated>
    <id>https://simpixelated.com/the-autumn-greenway/</id>
    <content type="html">&lt;p&gt;One of my &lt;a href=&quot;https://simpixelated.com/year-end-review-2024/&quot;&gt;goals for 2024&lt;/a&gt; was to &amp;quot;Get a small win with urbanist advocacy”. Throughout 2023 and 2024 I had been meeting with a small group of local bicycle and pedestrian advocates here in Carmel. One of our big ideas, inspired by a high school project by local Riley Choe, was building a new multi-use path in the center of Carmel, connecting to the existing (and amazing) Monon Trail.&lt;/p&gt;
&lt;p&gt;I’m happy to announce that in part due to our advocacy, the project has been funded and scheduled for development, hopefully as early as 2026! From the &lt;a href=&quot;https://youarecurrent.com/2024/12/30/full-steam-ahead-mayor-plans-to-continue-robust-pace-of-progress-in-2025/&quot;&gt;Current in Carmel&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CCPR also expects to continue plans to expand its trail network. It is working with the city to create the Autumn Greenway, which will stretch east-west from Midtown/City Center to the Old Meridian Street corridor; and a north-south greenway connecting Autumn Greenway to Main Street. Land acquisition and planning is expected to occur in 2025, with development set to begin in 2026, according to CCPR Director Michael Klitzing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;The Vision&lt;/h2&gt;
&lt;h3&gt;Connecting the urban cores of Carmel with a multi-use path&lt;/h3&gt;
&lt;p&gt;The proposal is to add a roughly one mile extension to the Monon Trail in Carmel. It would start from the trail, just north of City Center Drive, run mostly through vacant land, connecting neighborhoods along Autumn Drive and 126th Street, and eventually end at Old Meridian Street. This would provide a pleasant and safe connection to the farmer’s market, restaurants, groceries, and more, for thousands of residents who currently live just out of walking distance of the Monon Trail.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://simpixelated.com/the-autumn-greenway/9BzWrgkp6h-2556.png&quot; alt=&quot;Proposed multi-use path route&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2556&quot; height=&quot;596&quot;&gt;
&lt;em&gt;Proposed route&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;▶️ Watch &lt;a href=&quot;https://www.youtube.com/watch?v=nmqCMsSQ76Y&quot;&gt;Riley&#39;s video&lt;/a&gt; for a detailed breakdown&lt;/p&gt;
&lt;h4&gt;To connect neighborhoods&lt;/h4&gt;
&lt;p&gt;The Monon Trail is the centerpiece of Carmel, Indiana. It connects the city with Indianapolis to the south and Westfield to the north. On holidays, weekends, and warm weather months, people from all over use the trail for exercise, recreation, and to visit local businesses on Main Street, Midtown, City Center, and more.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The city’s Arts and Design District is centered around the Monon. Upscale Midtown, with nearly a billion dollars in development investment, rose because of it.” - &lt;a href=&quot;https://www.indystar.com/story/news/local/2021/07/28/the-monon-trail-indianapolis-once-controversial-now-beloved/5324106001/&quot;&gt;from IndyStar&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The city also continues to spur development along Old Meridian (recently named the “&lt;a href=&quot;https://youarecurrent.com/2023/12/07/carmel-unveils-plans-for-flower-district/&quot;&gt;Flower District&lt;/a&gt;”). Unfortunately between these two urban cores, there is no direct path, especially for pedestrians or bicyclists.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://simpixelated.com/the-autumn-greenway/cF_ziwyoMJ-2174.png&quot; alt=&quot;Route options for pedestrians crossing town&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2174&quot; height=&quot;1462&quot;&gt;
&lt;em&gt;Route options for pedestrians crossing town&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A pedestrian going from Midtown to Old Meridian has to walk a half-mile out of their way, on narrow sidewalks alongside winding four-lane roads, across double lane roundabouts and watching for cars at every driveway. It’s inconvenient, stressful, and dangerous for anyone outside of a car. So despite being just a mile apart, most people choose to drive when traveling between these neighborhoods.&lt;/p&gt;
&lt;h4&gt;To reduce traffic&lt;/h4&gt;
&lt;p&gt;To help ease traffic congestion as the city continues to grow, we need more transportation options. The amount of bikes parked at the farmer’s market on any given summer weekend proves that people are willing to bike or walk when there is a safe and convenient way to do so.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://simpixelated.com/the-autumn-greenway/AVyZLNWGZB-510.png&quot; alt=&quot;bike valet parking at Carmel Farmer’s Market&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;510&quot; height=&quot;680&quot;&gt;
&lt;em&gt;bike valet parking at Carmel Farmer’s Market&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Monon Trail is amazing for traveling north and south, but we need more connections going east and west. We need more safe biking and walking infrastructure to encourage people to leave their car at home.&lt;/p&gt;
&lt;p&gt;Everyone will benefit from fewer cars on the road, even those that never use this proposed path. For those that still choose to drive, they will encounter less traffic on the way and more parking spaces at their destination.&lt;/p&gt;
&lt;h4&gt;To provide more safe routes to school&lt;/h4&gt;
&lt;p&gt;Carmel Elementary, Carmel Middle, and Carmel High School are all within walking distance of the Monon Trail, but getting across town can be difficult and dangerous on foot or by bike. The Autumn Greenway will give students traveling east or west a safe option for a large portion of the trip.&lt;/p&gt;
&lt;p&gt;For example, elementary age students living along Old Meridian could take the path, separated from cars, to the Monon Trail, and then across Rangeline around Midtown. High school students could do the same, taking the greenway to the Monon and then on to Main St. with minimal interactions with cars. Finally, students attending Carmel Middle School would have another option for getting to Guilford Road.&lt;/p&gt;
&lt;h4&gt;To benefit our local economy&lt;/h4&gt;
&lt;p&gt;It has been proven that multi-use paths like the Monon have a dramatically positive economic impact on the areas they connect. In fact, a &lt;a href=&quot;https://southernindianabusinessreport.com/2023/05/31/monon-south-brings-economic-health-benefits/&quot;&gt;recent study&lt;/a&gt; by Indiana University School of Public Health concluded &amp;quot;the net economic impact of trails and active transportation annually in Indiana is as much as $1.6 billion&amp;quot;. Those benefits &amp;quot;increase exponentially as the connectivity between trails, people and places improves&amp;quot;.&lt;/p&gt;
&lt;p&gt;The Monon Trail has already stimulated more than a billion dollars in development investment in Carmel and &lt;a href=&quot;https://www.indystar.com/story/news/local/2021/07/28/the-monon-trail-indianapolis-once-controversial-now-beloved/5324106001/&quot;&gt;raised property values by at least 11%&lt;/a&gt; in Indianapolis. Properties along the Monon in Carmel are the &amp;quot;the &lt;a href=&quot;https://carmelmonthlymagazine.com/celebrating-two-decades-of-the-monon-greenway/&quot;&gt;most sought-after properties&lt;/a&gt;&amp;quot;, making the trail the equivalent of &lt;a href=&quot;https://carmelmonthlymagazine.com/celebrating-two-decades-of-the-monon-greenway/&quot;&gt;&amp;quot;beach-front property in Central Indiana&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Autumn Greenway will also likely improve property value for property owners along the new trail. It will increase the chance that people walking and biking will stop at a local business. It will provide another reason for tourists to visit Carmel. It will increase the likelihood that employees will want to relocate and stay in the area.&lt;/p&gt;
&lt;p&gt;There are other indirect benefits of The Autumn Greenway for the local economy: the more people who choose to walk or bike instead of driving, will reduce the overall wear and tear on our roads. With fewer people on the road, the less chance of an accident, which is a drain on our emergency response and hospital systems. People wanting to enjoy a beer or two at Sun King will have another option to walk home safely, preventing possible drunk driving accidents.&lt;/p&gt;
&lt;h4&gt;To provide more green-space in the urban core&lt;/h4&gt;
&lt;p&gt;In addition to providing a path for active transportation, this extension would also provide a safe and calming place for people to walk their dog, exercise, and enjoy green-space. The cross-country teams at Carmel Clay Schools already use The Monon Trail for training as &lt;a href=&quot;https://carmelmonthlymagazine.com/celebrating-two-decades-of-the-monon-greenway/&quot;&gt;&amp;quot;an alternative to busy streets and narrow sidewalks&amp;quot;&lt;/a&gt;. The Autumn Greenway will provide another (much needed) linear park within central Carmel.&lt;/p&gt;
&lt;h4&gt;To help achieve the city’s climate goals&lt;/h4&gt;
&lt;p&gt;Carmel’s Climate Action Plan outlines strategies for achieving net zero GHG emissions by 2050, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://climatecarmel.com/actions/T-1&quot;&gt;Encourage Multi-Modal Transportation and Walkability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://climatecarmel.com/actions/T-6&quot;&gt;Expand Promotion of Bicycles as Alternative Mode of Transportation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://climatecarmel.com/actions/FA-3&quot;&gt;Promote Local Food Purchasing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://climatecarmel.com/actions/FA-7&quot;&gt;Evaluate Farmers Market Potential for Accessibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these could be addressed or improved by an extension to the Monon Trail. Because of it’s location (ending just north of City Center Drive), it will add low-stress access to the farmer’s market for many residents, which will encourage people to buy more local food, use multi-modal transportation, and make it easier to adopt bicycles as an alternative to driving.&lt;/p&gt;
&lt;h3&gt;Design and Development Timeline&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2022 - Riley created an &lt;a href=&quot;https://youtu.be/nmqCMsSQ76Y&quot;&gt;amazing video&lt;/a&gt; highlighting the problems that the Autumn Greenway could solve.&lt;/li&gt;
&lt;li&gt;2023 - A small group of local bicycle advocates started meeting monthly, calling ourselves the The Carmel Transportation Party. Based on Riley’s video, the off-street trail (with the working title “Monon Extension”) was one of our main topics.&lt;/li&gt;
&lt;li&gt;Jan. 2024 - Newly elected city council member &lt;a href=&quot;https://www.carmel.in.gov/government/city-council/matt-snyder&quot;&gt;Matt Snyder&lt;/a&gt; joined our meeting and immediately wanted to help make the new trail a reality. He helped schedule a meeting with council member &lt;a href=&quot;https://www.carmel.in.gov/government/city-council/anita-joshi&quot;&gt;Anita Joshi&lt;/a&gt;, the parks department, and the engineering department at the city.&lt;/li&gt;
&lt;li&gt;Spring 2024 - Jeremy Kashman investigated the project and made a final recommendation to Mayor Finkam for approval.&lt;/li&gt;
&lt;li&gt;October 2024 - The project had made it through the Land Use and Special Studies Committee with $9M budgeted to each section: the Autumn Greenway and Memorial Greenway (new northern spur). It was later approved by city council, as part of a much larger bond package.&lt;/li&gt;
&lt;li&gt;2025 - Land acquisition and planning is expected to occur.&lt;/li&gt;
&lt;li&gt;2026 - Development set to begin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&#39;re interested in helping Carmel build more projects like this, join me at &lt;a href=&quot;https://strongtownscarmel.org&quot;&gt;Strong Towns Carmel&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Year-end review 2024</title>
    <link href="https://simpixelated.com/year-end-review-2024/" />
    <updated>2024-12-31T00:00:00Z</updated>
    <id>https://simpixelated.com/year-end-review-2024/</id>
    <content type="html">&lt;p&gt;Taking inspiration from &lt;a href=&quot;https://www.falldowngoboone.com/blog/year-end-review-2024/&quot;&gt;Ryan Boone&lt;/a&gt;, the following is a list of 2024 failures and accomplishments, and goals for 2025.&lt;/p&gt;
&lt;h3&gt;2024 Goals&lt;/h3&gt;
&lt;p&gt;I only had two goals for &lt;a href=&quot;https://simpixelated.com/year-end-review-2023/&quot;&gt;last year&lt;/a&gt;, but they were both pretty big. Like most people who set New Years resolutions, I was really focused on them to start the year, but completely lost steam after a few months. I’m forgiving myself for that though, because I was dealing with a lot. We had just moved across the country to a new city and state. My daughter received her diagnosis as neurodivergent. I was trying to build up an advocacy group around biking and walking. At the same time, I was still adjusting to having a corporate job at the biggest company I’d ever worked for.&lt;/p&gt;
&lt;p&gt;Plus, I had been ignoring a lot of early childhood issues that were turning into a mid-life crisis and frankly, I needed help. I started consistently attending therapy in 2024 and it was such a huge change for me. I cut some things out my life, namely blogging and advocacy, to focus on self care.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;Publish at least 12 posts on my blog.&lt;/strong&gt; While I fell significantly short of my goal, I still managed to publish four posts last year and seven updates to my &lt;a href=&quot;https://simpixelated.com/now&quot;&gt;now&lt;/a&gt; page. I also made progress on numerous draft posts that I would like to finish someday. I think what blocked me the most, other than the aforementioned business, is that I got stuck on a particularly long post about why I moved to Carmel. In retrospect, I should have skipped it and moved on to finish other posts. But at the time, I felt like I was so close to finishing it, I shouldn’t put effort into anything else.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Get a small win with urbanist advocacy.&lt;/strong&gt; Although I did dial it back on organizing and attending things this year, we still ended up with a major win: the multi-purpose trail that Riley and I championed got officially picked up by the city and is being planned to get started in 2025! It’s being called The Autumn Trail and might even get some extra segments connected. Most of the work in getting this started is thanks to Riley and all the work they did documenting the problem and the solution. Thanks to Council-member Snyder who helped connect us with the Parks Department and the Engineering Department and get it funded as part of a group of bonds at the end of 2024.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2025 Goals&lt;/h3&gt;
&lt;p&gt;For the next year, I’m excited to continue building from where I left off.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Publish 6 blog posts.&lt;/strong&gt; While not aiming as high, I’m still trying to push myself to publish more than I did last year.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make tangible progress in real estate development.&lt;/strong&gt; I don’t know what this means yet. I’d love to lead the development of my own project, but I don’t feel ready for that, financially or mentally. Instead, I’m planning to volunteer with &lt;a href=&quot;https://handincorporated.org/&quot;&gt;HAND&lt;/a&gt;, a non-profit here in Indiana focused on building affordable housing in my county. I’ve already attended an incremental real estate development workshop earlier this year. I’ve been studying lessons from Strong Towns and City Nerd and every other urbanist YouTuber or blogger for many years. I want to help connect the people and ideas that I’ve been learning together into something actionable. I think I’m most interested in advocating for policy change, so I’ll see where that leads me.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Collected &lt;a href=&quot;https://simpixelated.com/now&quot;&gt;/now&lt;/a&gt; updates&lt;/h3&gt;
&lt;h4&gt;Read&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://a.co/d/dUSGjBO&quot;&gt;Building Optimism: Why Our World Looks the Way it Does, and How to Make it Better&lt;/a&gt;&lt;/em&gt; by Coby Lefkowitz - I&#39;ve been a fan of Coby since he started daily posting positive examples of good American development on Twitter. I love his perspective, optimisim, and the action he&#39;s taking to make the built world a better place.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://pmpress.org/index.php?l=product_detail&amp;amp;p=1188&quot;&gt;Jackson Rising Redux: Lessons on Building the Future in the Present&lt;/a&gt;&lt;/em&gt;, which is a collection of essays about &lt;a href=&quot;https://cooperationjackson.org/&quot;&gt;Cooperation Jackson&lt;/a&gt; and similar projects around the country focused on the solidarity economy, with a focus on Black self-determination. Very inspiring read so far.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Laziness Does Not Exist&lt;/em&gt; - good follow-up to &lt;em&gt;Quit&lt;/em&gt; and it helped cope with my guilt over not being more productive with my free time&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Quit: The Power of Knowing When to Walk Away&lt;/em&gt; - I kind of took the opposite of the advice from this book. I tend to quit most things too easily, so I welcomed the insight into why or why not to quit.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.burnoutbook.net/&quot;&gt;Burnout: The Secret to Unlocking the Stress Cycle&lt;/a&gt;&lt;/em&gt; - this is specifically written for a female audience, but there&#39;s plenty of useful advice for any gender&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.porchlightbooks.com/product/confessions-of-a-recovering-civil-engineer-transportation-for-a-strong-town--charles-l.-marohn&quot;&gt;Confessions of a Recovering Engineer: Transportation for a Strong Town&lt;/a&gt;&lt;/em&gt; by Charles L Marohn - started but didn&#39;t finish this&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.effectivealtruism.org/doing-good-better&quot;&gt;Doing Good Better&lt;/a&gt;&lt;/em&gt; and excited to apply it to my life&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Watched&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Arcane&lt;/em&gt; season 2 and &lt;em&gt;Spy x Family&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Latest season of &lt;em&gt;Taskmaster&lt;/em&gt; and &lt;em&gt;Taskmaster Kids&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href=&quot;https://www.youtube.com/@FDSignifire&quot;&gt;FD Signifire&lt;/a&gt; (leftist video essays), &lt;a href=&quot;https://www.youtube.com/@HasanAbi&quot;&gt;HasanAbi&lt;/a&gt; (leftist political news), &lt;a href=&quot;https://www.youtube.com/@rickglassman&quot;&gt;Rick Glassman&lt;/a&gt; (comedic interview podcast), &lt;a href=&quot;https://www.youtube.com/@MartijnDoolaard&quot;&gt;MartijnDoolaard&lt;/a&gt; (beautifully shot videos of the process of restoring and living in a stone cabin in the Italian Alps)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Rings of Power&lt;/em&gt; season 2 (it is boring and I dislike so many of the writing choices, but there&#39;s a kernal of greatness)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.netflix.com/title/81564899&quot;&gt;Delicious in Dungeon&lt;/a&gt;&lt;/em&gt; season one (with my daughter who now loves it too)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;LEGO Masters: Australia&lt;/em&gt; season 2 - only got halfway through before abandoning out of boredom&lt;/li&gt;
&lt;li&gt;Tried to get into &lt;em&gt;Taskmaster: Australia&lt;/em&gt; season 2, but didn&#39;t really pull me in like the original&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Tokyo Vice&lt;/em&gt; - really enjoyed it, despite the &lt;a href=&quot;https://www.vulture.com/2022/04/ansel-elgort-sexual-assault-allegations-timeline.html&quot;&gt;allegations against the lead actor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rewatched &lt;em&gt;Dune&lt;/em&gt; and &lt;em&gt;Dune 2&lt;/em&gt; - very cinematic, even though I couldn&#39;t hear half of what was being whispered&lt;/li&gt;
&lt;li&gt;Adored everyone on &lt;em&gt;&lt;a href=&quot;https://www.netflix.com/title/81338328?source=35&quot;&gt;Love on the Spectrum&lt;/a&gt;&lt;/em&gt; season 2&lt;/li&gt;
&lt;li&gt;Thoroughly enjoyed &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Blue_Eye_Samurai&quot;&gt;Blue Eye Samurai&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Played&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Beat most of &lt;em&gt;Wildfrost&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Finished &lt;em&gt;God of War: Ragnorak&lt;/em&gt; - really enjoyed the world but felt like the story went on too long&lt;/li&gt;
&lt;li&gt;Burnt out on &lt;em&gt;Path of Exile&lt;/em&gt; (excited for PoE2!)&lt;/li&gt;
&lt;li&gt;Jumped back into &lt;em&gt;Brotato&lt;/em&gt; and the DLC&lt;/li&gt;
&lt;li&gt;Leveled many characters to max in &lt;em&gt;Diablo IV&lt;/em&gt; seasons&lt;/li&gt;
&lt;li&gt;Tried out &lt;em&gt;Spiritfarer&lt;/em&gt; - very cool, but didn&#39;t hook me&lt;/li&gt;
&lt;li&gt;Got hooked on &lt;em&gt;Balatro&lt;/em&gt; for like a week (great Steam Deck game)&lt;/li&gt;
&lt;li&gt;Finished &lt;em&gt;Ghost of Tsushima&lt;/em&gt; - one of my favorite games of all time!&lt;/li&gt;
&lt;li&gt;Put many hours into &lt;em&gt;My Time at Sandrock&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Redownloaded &lt;em&gt;Hades&lt;/em&gt; for the Steam Deck&lt;/li&gt;
&lt;li&gt;Restarted &lt;em&gt;Baldur&#39;s Gate 3&lt;/em&gt; campaign for the 3rd time&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Group posts by year in Eleventy.js</title>
    <link href="https://simpixelated.com/group-posts-by-year-in-eleventy-js/" />
    <updated>2024-03-13T00:00:00Z</updated>
    <id>https://simpixelated.com/group-posts-by-year-in-eleventy-js/</id>
    <content type="html">&lt;p&gt;I tend to sporadically publish blog posts. I&#39;ll do a burst of content for a few months, then kind of sputter out for awhile (sometimes years). Because of this inconsistent schedule, it makes more sense to group my blog posts by year. That makes it more obvious that two consecutive blog posts might be separated by a long break.&lt;/p&gt;
&lt;p&gt;Since I want the newest content at the top, I want the years reverse chronological order and the posts within each year also in reverse chronological order. From the beginning, I had hoped to accomplish this with just Nunjuck&#39;s filters and I thought it would be as simple as this:&lt;/p&gt;
&lt;pre class=&quot;language-jinja2&quot;&gt;&lt;code class=&quot;language-jinja2&quot;&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;collections&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;groupby&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;data.year&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;reverse&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But no matter what, I couldn&#39;t make it work. Turns out &lt;a href=&quot;https://chriskirknielsen.com/blog/group-posts-by-year-with-nunjucks-in-eleventy/&quot;&gt;Christopher Kirk-Nielsen&lt;/a&gt; also ran into and eventually solved this problem:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The only issue with this approach is that the year keys we get are sorted in ascending order, and throwing in a reverse before grouping does nothing, while adding reverse at the end breaks object entirely — it only works for strings and arrays, and sort doesn’t operate on objects. So while we see posts within each year sorted from newest to oldest thanks to reverse in the second for-loop, the years themselves are sorted from oldest to newest.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It turns out the answer is to use &lt;code&gt;dictsort&lt;/code&gt; on the &lt;code&gt;year&lt;/code&gt; object prior to reversing it. The end result is a fairly simple for loop in my Nunjucks template:&lt;/p&gt;
&lt;pre class=&quot;language-jinja2&quot;&gt;&lt;code class=&quot;language-jinja2&quot;&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;collections&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;groupby&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;data.year&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;dictsort&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;reverse&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;year&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;reverse&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;tags&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;tags&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;exclude&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;posts&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;title&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;small&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;post-meta&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{{&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;postDate&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;}}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;time&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;tags&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt; - &lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tag-list.njk&quot;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;endif&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;small&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;endfor&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;endfor&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: there are two uses of &lt;code&gt;reverse&lt;/code&gt; above: one for the &lt;code&gt;year&lt;/code&gt; object and one for &lt;code&gt;posts&lt;/code&gt;. Also, the &lt;code&gt;exclude(&#39;posts&#39;)&lt;/code&gt; bit prevents &amp;quot;posts&amp;quot; from showing in the tag list for every post (since all posts have this tag, in addition to whatever custom tags you&#39;ve added).&lt;/p&gt;
&lt;p&gt;The above also depends on a &lt;code&gt;year&lt;/code&gt; custom attribute in my &lt;a href=&quot;https://www.11ty.dev/docs/data-computed/&quot;&gt;computed data&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;eleventyComputed&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function-variable function&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getFullYear&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Alternatives Considered&lt;/h3&gt;
&lt;p&gt;Prior to discovering the &lt;code&gt;dictsort&lt;/code&gt; filter, a custom Eleventy collection was how I accomplished this. It&#39;s more complex, but still works the same:&lt;/p&gt;
&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addCollection&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;postsByYear&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;collection&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; posts &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; collection&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getFilteredByTag&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;posts&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reverse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; years &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; posts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getFullYear&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; uniqueYears &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;years&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; postsByYear &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; uniqueYears&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;prev&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; year&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; filteredPosts &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; posts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getFullYear&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; year&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;prev&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;year&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; filteredPosts&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; postsByYear
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then it gets used on my blog page, just like the simpler solution above:&lt;/p&gt;
&lt;pre class=&quot;language-jinja2&quot;&gt;&lt;code class=&quot;language-jinja2&quot;&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;posts&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;collections&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;postsByYear&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Other posts that inspired me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://darekkay.com/blog/eleventy-group-posts-by-year/&quot;&gt;Group posts by year in Eleventy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/11ty/eleventy/issues/1284#issuecomment-1026679407&quot;&gt;How do you list all posts grouped by year? 11ty/eleventy#1284 (comment)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/eleventy/comments/1bds2q2/comment/kup0d9u/&quot;&gt;Comment by Reddit user five35&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Leave a comment&lt;/h3&gt;
&lt;p&gt;Have thoughts? Suggestions? Leave a comment on the &lt;a href=&quot;https://www.reddit.com/r/eleventy/comments/1bds2q2/group_posts_by_year_in_eleventyjs_short_tutorial/&quot;&gt;Reddit post&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Year-end review 2023</title>
    <link href="https://simpixelated.com/year-end-review-2023/" />
    <updated>2024-03-11T00:00:00Z</updated>
    <id>https://simpixelated.com/year-end-review-2023/</id>
    <content type="html">&lt;p&gt;The big event from last year was moving to Carmel, Indiana from Washington state. It was a huge cross-country move that sucked up a lot of my time and energy. But I’m happy we made the move. Since then I bought a cargo bike that I use daily, for rides to school, groceries, and other errands. I’m working with other local advocates to bring more urbanism to our suburban city. I’m not sure what 2024 will bring, but hopefully more of the same.&lt;/p&gt;
&lt;p&gt;Taking inspiration from &lt;a href=&quot;https://www.falldowngoboone.com/blog/year-end-review-2023/&quot;&gt;Ryan Boone&lt;/a&gt;, the following is a list of 2023 failures and accomplishments, and goals for 2024.&lt;/p&gt;
&lt;h3&gt;2023 failures&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;Publish at least 12 posts on my blog.&lt;/strong&gt; I fell short of my goal, but I still put out 9 posts, which is 8 more than 2022. I’m calling this a failure, but I’m also proud of how much progress I made. It makes me feel like publishing 12 this year shouldn’t be a stretch at all.&lt;/li&gt;
&lt;li&gt;😞 &lt;strong&gt;Stay consistent with my daily habits.&lt;/strong&gt; While I’ve maintained most of the &lt;a href=&quot;https://twitter.com/simpixelated/status/1603418237294632960&quot;&gt;list of daily habits&lt;/a&gt; I set for myself back in 2022, I’ll admit I’ve fallen off a bit. I still mostly stay off my phone first thing in the morning. I only stretch once a day now, but I find that’s enough. I definitely don’t exercise daily, other than riding a mile on my e-bike. I want to get back into this now that the weather is getting nicer. I don’t write daily either, but I’d say I do it probably every other day.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2023 accomplishments&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Convert my blog from Gatsby to Eleventy.&lt;/strong&gt; I did it! My blog was gone through many different tech stack iterations, and I’ve probably said this every time, but I’m really happy with the new framework. What I love: the code base is extremely simple, the list of dependencies is very short, and I can understand how it all works even after taking several month long breaks. I’ve been slowly publishing all the 11ty tips and tricks I learned along the way.&lt;/li&gt;
&lt;li&gt;🚲 &lt;strong&gt;Rode my bike more than I drove my car.&lt;/strong&gt; As I mentioned, we moved to Carmel, specifically for the biking and walking infrastructure. I challenged myself to ride it for every trip that was feasible, regardless of the weather or my mood. I managed to do that for the most part, even when the paths were covered in snow and temperatures got down close to zero degrees.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2024 Goals&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Publish at least 12 posts on my blog.&lt;/strong&gt; I’m giving myself the same goal again and this time I feel confident I’ll reach it. Last year, my focus was on writing and I feel like I got pretty good at that. This year, my focus is on editing and publishing. As of today, I have over forty drafts in various stages. Now I need to get better at editing and publishing. It’s time to shit or get off the pot, so to speak. Here are some of the topics I plan to finalize a post on this year:
&lt;ul&gt;
&lt;li&gt;why we moved to Carmel&lt;/li&gt;
&lt;li&gt;more Eleventy tutorials: grouping posts by year, creating dynamic social share images, using SVGs/SaSS/Prism.js&lt;/li&gt;
&lt;li&gt;how and why I converted from Gatsby to Eleventy&lt;/li&gt;
&lt;li&gt;using Lighthouse CI to audit Netlify deploy previews on GitHub pull requests&lt;/li&gt;
&lt;li&gt;a longterm review of my Urban Arrow cargo bike&lt;/li&gt;
&lt;li&gt;burnout: what it’s like and how I handled it&lt;/li&gt;
&lt;li&gt;my complete salary history as a self-taught developer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get a small win with urbanist advocacy.&lt;/strong&gt; &lt;a href=&quot;https://twitter.com/simpixelated/status/1766112574704144719&quot;&gt;No more slacktivism&lt;/a&gt;. I don’t know what this is yet, which is why it needs to be small. I’ve been working with a few other local advocates to improve walking and biking in our city. Some of the things we’ve been focusing on: adding a new mile-long bike path, lowering speed limits, removing restrictions on multi-family development, adding crosswalks near schools, and considering establishing a non-profit to focus on all of that. Most of these projects can take years to actually happen, so it’s hard to pin down a specific goal for this year. But I&#39;m hoping to look back on 2024 and have something concrete to point to (maybe even literally).&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Adding inline SVGs to Eleventy.js</title>
    <link href="https://simpixelated.com/adding-inline-svgs-to-eleventy-js/" />
    <updated>2024-03-03T00:00:00Z</updated>
    <id>https://simpixelated.com/adding-inline-svgs-to-eleventy-js/</id>
    <content type="html">&lt;h3&gt;Why inline SVGs?&lt;/h3&gt;
&lt;p&gt;On the &lt;a href=&quot;https://simpixelated.com/&quot;&gt;homepage&lt;/a&gt; of this webite, I use SVG icons for the links to my other profiles: GitHub, LinkedIn, Flickr, and Twitter. Why not use GIFs, PNGs, or JPEGs for those? Because SVGs are light in size, easy to style with CSS, and can be included as code. If you inline SVGs as code within your HTML, then browsers don&#39;t need to download a separate asset, and you don&#39;t have to store these images somewhere separate from your code. There are downsides with inlined SVGs though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;can&#39;t cache the SVG files separate from your code&lt;/li&gt;
&lt;li&gt;lots of extra code (that&#39;s mostly unreadable)&lt;/li&gt;
&lt;li&gt;if you need to change it later, you have to push a new changeset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&#39;re willing to live with the downsides, then keep reading! This is something that’s really easy to do in React. While not 100% supported right out of the box, it was relatively simple to enable in Eleventy. I just had to install the &lt;a href=&quot;https://www.11ty.dev/docs/plugins/image/&quot;&gt;Eleventy Image plugin&lt;/a&gt; and add a filter to my &lt;a href=&quot;https://www.11ty.dev/docs/config/&quot;&gt;config&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Image &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;@11ty/eleventy-img&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;eleventyConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addNunjucksAsyncShortcode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;svgIcon&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; metadata &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;./src/_includes/assets/&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;filename&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;formats&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;svg&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;dryRun&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; metadata&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;svg&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; config
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With that in place, I could inline an SVG file anywhere I needed it in my templates using Nunjucks, like so:&lt;/p&gt;
&lt;pre class=&quot;language-jinja2&quot;&gt;&lt;code class=&quot;language-jinja2&quot;&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;svgIcon&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;url-to-svg.svg&#39;&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A similar filter could be created for whichever templating language you’re using. Thanks for the inspiration from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@brettdewoody/inlining-svgs-in-eleventy-cffb1114e7b&quot;&gt;Inlining SVGs in Eleventy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chriskirknielsen.com/blog/manage-your-svg-files-with-eleventys-render-plugin/&quot;&gt;Manage your SVG files with Eleventy’s Render plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>How to build &quot;missing middle&quot; housing in Carmel</title>
    <link href="https://simpixelated.com/how-to-build-missing-middle-in-carmel/" />
    <updated>2024-03-01T00:00:00Z</updated>
    <id>https://simpixelated.com/how-to-build-missing-middle-in-carmel/</id>
    <content type="html">&lt;p&gt;Carmel, the city where I now live, has a housing affordability problem. This is not unique to Carmel, but how we got here is interesting. Carmel is a suburb of Indianapolis and like most suburbs, is mostly single family houses. However it has earned numerous awards and glowing press for it&#39;s &lt;a href=&quot;https://www.walkscore.com/score/loc/lat=39.97802093727322/lng=-86.12994629830949&quot;&gt;walkable and bikeable&lt;/a&gt; core. Unlike other cities, this wasn&#39;t accomplished by enabling organic growth through reduced parking mandates or abolishing single family zoning. Instead, the city heavily incentiviced mixed-use redevelopment with &lt;a href=&quot;https://www.choosecarmelin.com/tax-increment-finance&quot;&gt;Tax Incremental Financing&lt;/a&gt; and a long list of zoning exemptions for each project.&lt;/p&gt;
&lt;p&gt;So while there are numerous 5 story apartment buildings with ground-floor retail, those are juxtaposed by single story houses right next door. The demand to live in the walkable downtown has surpassed supply and residents making the median income of Carmel are not able to afford the median home price. Anyone making under $120K per year is having an especially hard time finding affordable housing. These are the people that we depend on for running our economy: cooks, waiters, teachers, and more.&lt;/p&gt;
&lt;p&gt;To better understand the problem, the mayor has created a &amp;quot;&lt;a href=&quot;https://youarecurrent.com/2024/02/20/carmel-housing-task-force-to-hold-first-public-meeting-feb-23/&quot;&gt;Housing Task Force&lt;/a&gt;&amp;quot; to &amp;quot;study the state of housing in the city&amp;quot;. You can watch the &lt;a href=&quot;https://www.youtube.com/watch?v=SSIetRhAEmQ&quot;&gt;first meeting on YouTube&lt;/a&gt; (I gave a public comment). The first meeting mostly revolved around a presentation by a consultant, that outlined how Carmel has the same problem as nearly everywhere else in the country: housing is unaffordable on median incomes and that&#39;s largely due to a lack of &amp;quot;missing middle&amp;quot; housing.&lt;/p&gt;
&lt;p&gt;In addition to giving a public comment at the meeting, I also sent a follow up email to the (only) city councilor on the task force:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Councilor Aasen,&lt;/p&gt;
&lt;p&gt;Thank you for taking part in the Housing Task Force and for speaking on behalf of your constituents. I am a resident of the North Central district and I spoke at today&#39;s meeting, asking the task force to look at how Carmel&#39;s zoning code limits what developers can build, both financially and legally. A great example are duplexes. These are only legal to build in R3 zoning, which only applies to a handful of properties within Carmel. Combined with max lot coverage, minimum setbacks, parking requirements, etc. it makes it an unwise investment if not impossible.&lt;/p&gt;
&lt;p&gt;As shown in the meeting today, there is demand for missing middle housing. Since small-scale multifamily projects are not possible, what happens instead is large-scale development, by developers with deep pockets, that can afford to weather the delays of zoning appeals and public hearings. Still the final product gets watered down by neighborhood opposition.
However, if building missing middle housing was allowed by law, then it wouldn&#39;t require public feedback on every property. It would enable small-scale development that slowly closes the gap in demand and affordability, while also allowing neighbors to adjust to density. It would enable individual home builders to participate in the growth of Carmel. Personally, I would love to be able to build a duplex near midtown so that I could afford to live there by renting out the other half.&lt;/p&gt;
&lt;p&gt;I hope this task force is able to work with, or make recommendations to the city council committee reviewing Carmel&#39;s Unified Development Ordinance, because the housing market and zoning are inextricably linked.
You mentioned not being afraid to think big. I love that! Here are &lt;a href=&quot;https://www.strongtowns.org/journal/2023/10/31/the-6-zoning-reforms-every-municipality-should-adopt&quot;&gt;6 big examples&lt;/a&gt; that will help Carmel add more missing middle housing.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2pG1YDEGmXc&quot;&gt;Here&#39;s a great video&lt;/a&gt; (using Fort Wayne zoning code as an example) of how to tweak a few numbers to enable more density even within single family neighborhoods.&lt;/p&gt;
&lt;p&gt;Thanks for your time,&lt;/p&gt;
&lt;p&gt;Jordan Kohl&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the same time, the mostly new city council is &lt;a href=&quot;https://youarecurrent.com/2024/02/20/carmel-committee-to-thoroughly-review-unified-development-ordinance/&quot;&gt;reviewing the Unified Development Ordinance&lt;/a&gt;, &amp;quot;a nearly 400-page document codifying the city’s zoning and development standards and processes&amp;quot;. This is a huge moment in the future direction of the city. The city zoning code is vital in determining what actually gets built.&lt;/p&gt;
&lt;p&gt;Most of Carmel is zoned for single family housing only. This means it is illegal to build an ADU, a duplex, or any other type of multi-family housing without appealing for a rezone or variance. While the city might be in favor of up-zoning and infill projects, a vocal minority of residents will inevitably show up to public hearings to oppose any density near their home. These battles can drag on for years, which requires deep pockets. The end result is that only large developers can afford to build in Carmel and even then have to be incentivized with things like TIF just to make the project “pencil out”.&lt;/p&gt;
&lt;h3&gt;What can Carmel actually do?&lt;/h3&gt;
&lt;p&gt;In my opinion, the solution to Carmel&#39;s housing crisis is to simply build more dense housing. We can&#39;t solve the problem with more 2,000 square foot houses on 10,000 square foot lots. That&#39;s not economically or environmentally sustainable. It&#39;s the housing trap we&#39;re already in. But in order to build more gentle density: small homes, duplexes, triplexes, townhomes, and condos, we need the city to relax zoning restrictions. If I had a wishlist for zoning reform in Carmel, it would like something like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;remove parking mandates (see &lt;a href=&quot;https://parkingreform.org/what-is-parking-reform/&quot;&gt;Parking Reform Network&lt;/a&gt; for why/how)&lt;/li&gt;
&lt;li&gt;reduce minimum lot sizes (read &lt;a href=&quot;https://www.mercatus.org/research/policy-briefs/urban-minimum-lot-sizes-their-background-effects-and-avenues-reform&quot;&gt;this brief&lt;/a&gt; by the Mercatus Center)&lt;/li&gt;
&lt;li&gt;allow duplexes in current single family only zoning&lt;/li&gt;
&lt;li&gt;legalize Accessory Dwelling Units (ADUs)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With these changes, it might be possible for individual home owners, or future ones, to build and buy affordable housing. I&#39;m looking forward to seeing what the task force discovers and decides to do with the information they gather. Ultimately, I hope we end up with a simplified zoning code that allows for a healthier mix of housing types.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Main Street Carmel needs safety improvements</title>
    <link href="https://simpixelated.com/main-street-carmel-needs-safety-improvements/" />
    <updated>2023-08-20T00:00:00Z</updated>
    <id>https://simpixelated.com/main-street-carmel-needs-safety-improvements/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;The following is an open letter to city council members for Carmel, Indiana.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dear Council Members Ayers, Worrel, Finkam, Rider, Hannon, and Nelson,&lt;/p&gt;
&lt;p&gt;On Friday August 18th a &lt;a href=&quot;https://www.reddit.com/r/Carmel/comments/15v3lso/hit_and_run_in_downtown_carmel_woman_who_is&quot;&gt;pregnant woman was struck&lt;/a&gt; by a vehicle at the &lt;a href=&quot;https://goo.gl/maps/aBWW3M3hPH2rWXac8&quot;&gt;Main Street and Monon Boulevard intersection&lt;/a&gt;. As a nearby resident, I use the crosswalk at that intersection, on foot and on bike, on a daily basis. I take my daughter to school (by bicycle) through this intersection and I see many other children doing it by themselves.&lt;/p&gt;
&lt;img src=&quot;https://simpixelated.com/main-street-carmel-needs-safety-improvements/V4dJreG72i-1384.png&quot; alt=&quot;Hit and run in downtown Carmel. Woman who is pregnant was hit, driver fled the scene&quot; style=&quot;margin: 0 auto; width:400px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1384&quot; height=&quot;1560&quot;&gt;
&lt;p&gt;With the constant conflict between pedestrians, cyclists, and motor vehicles at this intersection, an accident like this was bound to happen and &lt;strong&gt;will happen again&lt;/strong&gt; if the city does not make improvements to the infrastructure. Main Street is a destination, but much of the street design reinforces that it is also a thoroughfare. It cannot and should not be both.&lt;/p&gt;
&lt;p&gt;The city (with the help of Jeff Speck), has done an amazing job of designing a people-friendly streetscape in nearby Midtown. People of all ages and abilities can move safely through Monon Boulevard, because cars are deprioritized. The width of the streets, the minimal amount of street parking, the pavers, etc. all add up to make people in cars feel uncomfortable, as they should. When drivers feel like they are intruding in a space designed for everything but cars, they drive cautiously. This is all great and is part of what makes Midtown a destination for people of all ages and abilities. It’s what sold me on moving to Carmel in the first place.&lt;/p&gt;
&lt;p&gt;Unfortunately that wonderfully safe design comes to an end at Main Street. The priority of people over cars is flipped and instead the design makes it dangerously obvious that cars are the dominant mode use. The sidewalks are narrow. There is free parking on both sides of the street (despite our expensive parking garages just blocks away). At the crosswalk where the pregnant woman was struck, there is a stop sign for people on the Monon Trail. However drivers, in 4,000 pound vehicles, only stop if they feel like it.&lt;/p&gt;
&lt;img src=&quot;https://simpixelated.com/main-street-carmel-needs-safety-improvements/o7FIp_1nWE-1600.jpeg&quot; alt=&quot;bicycle path with counter (155 cyclists today)&quot; style=&quot;margin: 0 auto; width:600px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1068&quot;&gt;
&lt;p&gt;Main Street has so much potential and the city has a great base from which to build on. We only have to look at Midtown for inspiration. We must continue to improve the safety of Main Street (and the rest of the city) for people walking, biking, or rolling. It will only accelerate the success of local businesses and attract more families like mine, who moved here to live as car-free as possible.&lt;/p&gt;
&lt;p&gt;I am not a transportation expert, but there are many ways to improve the crosswalk at Monon and Main Street. Here are just a few ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Larger bulb outs for the crosswalk — by my measurement, it looks like the lanes are 11 feet wide or more at the intersection. NACTO recommends &lt;a href=&quot;https://nacto.org/publication/urban-street-design-guide/street-design-elements/lane-width/&quot;&gt;10 feet for urban areas&lt;/a&gt; to “have a positive impact on a street’s safety without impacting traffic operations”. The extra foot or so could be taken up with a curb extension for pedestrians waiting to enter the crosswalk, improving visibility for both drivers and pedestrians.&lt;/li&gt;
&lt;li&gt;Raised crosswalk — currently the sidewalk goes down to the street level, further reinforcing the idea that cars are the priority. However NACTO recommends that “&lt;a href=&quot;https://nacto.org/publication/urban-street-design-guide/intersections/minor-intersections/raised-intersections/&quot;&gt;raised intersections&lt;/a&gt; reinforce slow speeds and encourage motorists to yield to pedestrians at the crosswalk”.&lt;/li&gt;
&lt;li&gt;Stop sign — most of the time, drivers already stop here, because the crosswalk is so frequently used by pedestrians and cyclists. However, not all drivers know this. Why not make it official? It should be noted that this cannot be the only solution. Signage is not enough to direct motorist behavior. All it takes is one person ignoring the sign (on purpose or by accident) to cause another injury. We need proper infrastructure to slow drivers down.&lt;/li&gt;
&lt;li&gt;Remove parking — I would guess that a majority of the drivers on Main Street, especially on weekend nights, are people circling the block looking for the closest spot to their destination. People scanning for parking are distracted and anxious to avoid missing their opportunity. We should be directing people to use the abundant free parking we have in our garages. This could reap many positive benefits in the future as it would free up public space in front of our local businesses for seating and walking.&lt;/li&gt;
&lt;li&gt;Restrict car access entirely — the saddest part of hit and run is that it wouldn&#39;t have been possible the very next night, as the city closed Main Street to cars right at this intersection for &amp;quot;Late Night on Main&amp;quot;. An entire block of Main Street was closed to cars, but drivers still found parking without creating a traffic jam.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://simpixelated.com/main-street-carmel-needs-safety-improvements/txUIYOOzBm-4032.jpeg&quot; alt=&quot;people enjoying Main Street without a car&quot; style=&quot;margin: 0 auto; width:600px&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4032&quot; height=&quot;3024&quot;&gt;
&lt;p&gt;I hope you understand the importance of the situation on Main Street. We cannot allow the safety of people to be jeopardized for the efficiency cars. Well designed places are for people. They are destinations, not thoroughfares.&lt;/p&gt;
&lt;p&gt;Thank you for your time.&lt;/p&gt;
&lt;p&gt;Jordan Kohl&lt;/p&gt;
&lt;p&gt;Carmel Central District Resident&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Hiding drafts and future posts in Eleventy.js</title>
    <link href="https://simpixelated.com/hiding-drafts-and-future-posts-in-eleventy-js/" />
    <updated>2023-03-07T00:00:00Z</updated>
    <id>https://simpixelated.com/hiding-drafts-and-future-posts-in-eleventy-js/</id>
    <content type="html">&lt;p&gt;Now that I&#39;m publishing on a regular schedule, I need a way to create draft posts that can be merged into my main branch without showing up on my production website, as well as scheduling posts to be published at a future date. Thankfully, after a little searching, I discovered that the official docs have a &lt;a href=&quot;https://www.11ty.dev/docs/quicktips/draft-posts/&quot;&gt;quick tip&lt;/a&gt; on doing just that. Or at least there&#39;s example code for how to handle drafts and a hint that a similar technique could be used for scheduling. So I cobbled them together, following the advice on future posts from &lt;a href=&quot;https://saneef.com/tutorials/hiding-posts-with-future-dates-in-eleventy/&quot;&gt;this tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The basics of how this works is split into two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;setting &lt;code&gt;permalink&lt;/code&gt; to &lt;strong&gt;false&lt;/strong&gt; so the post doesn&#39;t get output at build time&lt;/li&gt;
&lt;li&gt;setting &lt;code&gt;eleventyExcludeFromCollections&lt;/code&gt; to &lt;strong&gt;true&lt;/strong&gt; so the post doesn&#39;t show up in your array of posts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To figure out if a post is a draft or future post, I created a helper method: &lt;code&gt;shouldHide&lt;/code&gt;, which checks if &lt;code&gt;draft&lt;/code&gt; is true in the item &amp;quot;data cascade&amp;quot; (e.g. frontmatter) or if the &lt;code&gt;date&lt;/code&gt; (also from the data cascade) is set for a time in the future.&lt;/p&gt;
&lt;p&gt;However you probably still want to see your draft and future posts while developing locally (while in &lt;code&gt;serve&lt;/code&gt; or &lt;code&gt;watch&lt;/code&gt; mode), so the 11ty docs wisely suggest wrapping this in a check for just that. This works by adding a hook on &lt;code&gt;eleventy.before&lt;/code&gt; that sets a new environment variable: &lt;code&gt;BUILD_DRAFTS&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The result is that drafts and future posts show up while serving your files, but not when doing a production build. Here&#39;s all of the code to handle this, that now lives in my config:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;shouldHide&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; draft &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;BUILD_DRAFTS&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isDraft &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; draft
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; isPageFromFuture &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; date &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getTime&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; Date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;now&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; isDraft &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; isPageFromFuture
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// When `permalink` is false, the file is not written to disk&lt;/span&gt;
eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addGlobalData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;eleventyComputed.permalink&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Always skip during non-watch/serve builds&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;shouldHide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;permalink
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// When `eleventyExcludeFromCollections` is true, the file is not included in any collections&lt;/span&gt;
eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addGlobalData&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;eleventyComputed.eleventyExcludeFromCollections&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// Always exclude from non-watch/serve builds&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;shouldHide&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

      &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;eleventyExcludeFromCollections
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;eleventy.before&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; runMode &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// Set the environment variable&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;runMode &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;serve&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; runMode &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;watch&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;BUILD_DRAFTS&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since my build output is still a static site, there&#39;s no way for the post to show up unless I do another build after the publish date. I haven&#39;t figured out an automated process for that yet, but I&#39;m sure with Netlify it&#39;s possible. For now, I&#39;ll just manually trigger a new deploy through the UI.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Filtering tags within Eleventy.js collections</title>
    <link href="https://simpixelated.com/filtering-tags-within-eleventy-js-collections/" />
    <updated>2023-02-21T00:00:00Z</updated>
    <id>https://simpixelated.com/filtering-tags-within-eleventy-js-collections/</id>
    <content type="html">&lt;p&gt;When you create a &lt;a href=&quot;https://www.11ty.dev/docs/collections/&quot;&gt;collection&lt;/a&gt; with Eleventy, you start with a tag. For my blog posts, I chose the tag &amp;quot;posts&amp;quot;. The problem with this is that whenever I want to display all the tags for a post, it also includes &amp;quot;posts&amp;quot;, which I don&#39;t like. This is a bit of code architecture that I didn’t want to expose to my readers.&lt;/p&gt;
&lt;p&gt;Probably I could do something globally to alter the tag list in my collection wherever they are used, but I like creating re-usable functions. So instead I created a simple array filter than can be used within a template to exclude any tag. It requires a bit of repetition (wherever post tags are used), but it’s only a few characters and the flexibility means I can filter out other tags (or any string in an array) when needed. Plus the code is really simple. Here&#39;s what it looks like in my &lt;a href=&quot;https://www.11ty.dev/docs/config/&quot;&gt;config&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;exclude&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;collection&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stringToFilter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;stringToFilter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; collection
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;collection &lt;span class=&quot;token operator&quot;&gt;??&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; item &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; stringToFilter&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, here is how it can be used in a template (this is within a &lt;code&gt;for&lt;/code&gt; loop of posts):&lt;/p&gt;
&lt;pre class=&quot;language-jinja2&quot;&gt;&lt;code class=&quot;language-jinja2&quot;&gt;&lt;span class=&quot;token jinja2 language-jinja2&quot;&gt;&lt;span class=&quot;token delimiter punctuation&quot;&gt;{%&lt;/span&gt; &lt;span class=&quot;token tag keyword&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;tags&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;tags&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;exclude&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;posts&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token delimiter punctuation&quot;&gt;%}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
</feed>