<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: t1mmen</title><link>https://news.ycombinator.com/user?id=t1mmen</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 10 Sep 2026 15:12:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=t1mmen" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by t1mmen in "Postgres Language Server: Initial Release"]]></title><description><![CDATA[
<p>Really excited about trying this, great job so far!<p>I think formatting/prettier-type functionality was mentioned as a possibility of this project, is that still in the cards?<p>(I can’t seem to find a formatter that understands stored procedure; does it even exist?)</p>
]]></description><pubDate>Sat, 29 Mar 2025 19:46:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43518096</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=43518096</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43518096</guid></item><item><title><![CDATA[New comment by t1mmen in "Postgres Language Server: Initial Release"]]></title><description><![CDATA[
<p>Oh, fun to see my project mentioned on HN! I’m glad to see it’s useful to others :)</p>
]]></description><pubDate>Sat, 29 Mar 2025 19:38:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=43518015</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=43518015</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43518015</guid></item><item><title><![CDATA[New comment by t1mmen in "A Language Server for Postgres"]]></title><description><![CDATA[
<p>Thank you, I’m glad to hear it works well for others too!<p>If you come across issues or can think of anything that would improve it, please let me know :)</p>
]]></description><pubDate>Fri, 21 Feb 2025 22:45:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=43133997</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=43133997</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43133997</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: A Fast HTTP Request CLI Powered by HTTL"]]></title><description><![CDATA[
<p>100%, this.<p>Im a bit flabbergasted I haven’t yet found a HTTP/API client that simply runs off an oAPI spec. Sure, most support «import of..», but do any support oAPI’s as continuously evolving source of truth?<p>Our oAPI spec is auto-generated (based off ts-rest.com contracts), and I’d love one that understands this, including auto-refreshing/importing of spec when it changes on disk.<p>If anyone knows of this magical piece of software, please share!</p>
]]></description><pubDate>Thu, 20 Feb 2025 09:54:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43112913</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=43112913</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43112913</guid></item><item><title><![CDATA[New comment by t1mmen in "A Language Server for Postgres"]]></title><description><![CDATA[
<p><a href="https://github.com/t1mmen/srtd">https://github.com/t1mmen/srtd</a> might help here. The general idea is to define functions/policies/etc as «SQL templates», your source of truth. The templates built into Supabase migrations.<p>While developing, srtd can hot/live reload your templates into the local db when changed.<p>I built this to scratch my own itch, and it’s been working VERY well for us. Huge DX benefits, and it’s made code reviews a LOT easier, since the reviewer can focus on what’s actually changed.</p>
]]></description><pubDate>Thu, 20 Feb 2025 01:59:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=43110206</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=43110206</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43110206</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: SRTD – Live-reloading SQL templates for Supabase migrations"]]></title><description><![CDATA[
<p>You're very welcome, hope it helps you!<p>I considered Atlas as well, but I didn't like the idea of using HCL to define SQL; The srtd approach is just SQL, so aside from setup, there's nothing new to learn.<p>The downside of srtd vs Atlas is that Atlas (seemingly) can do your whole schema, including tables, indexes, etc. srtd only works well for idempotent operations (aka can re-run multiple times without producing a different result)</p>
]]></description><pubDate>Sun, 12 Jan 2025 09:41:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=42672371</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=42672371</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42672371</guid></item><item><title><![CDATA[Show HN: SRTD – Live-reloading SQL templates for Supabase migrations]]></title><description><![CDATA[
<p>We've been happily building on Supabase for ~two years, two major DX frustrations aside:<p>1. The iteration cycle for database functions was needlessly complex. Some variation of this workflow was common:<p><pre><code>  - Find existing function/view/policy/etc in past migrations
  - Copy to SQL editor
  - Make changes 
  - Test
  - Copy back to migration file
  - Repeat
</code></pre>
2. Code reviews were painful since every function modification appeared as a complete rewrite. Adding a single line in a 400-line function results in an entirely new file with +401 lines. No historic context, either. Lots of mental overhead for reviewers.<p>I have searched for tools/workflows to address this, but have came up short. (<a href="https://news.ycombinator.com/item?id=36007640">https://news.ycombinator.com/item?id=36007640</a>, <a href="https://news.ycombinator.com/item?id=37755076">https://news.ycombinator.com/item?id=37755076</a>)<p>So, over the holidays I paired with Claude to make SRTD (Supabase Repeatable Template Definitions), addressing these issues with a template-based workflow:<p><pre><code>    # Make a template with safely repeatable SQL
    echo "-- some idempotent sql" >> supabase/migrations-templates/my_function.sql
    
    # Edit your SQL templates, changes auto-apply to local DB
    npx @t1mmen/srtd watch
    
    # Generate standard Supabase migrations when ready
    npx @t1mmen/srtd build

</code></pre>
Key features:<p><pre><code>   * Live-reload for SQL templates (great for functions, policies, views, etc)
   * Single source of truth for database objects, with history/functional git blame.
   * Standard (Supabase) migrations as output
   * Safe iteration with WIP templates that never generate migrations (.wip.sql)
</code></pre>
Focus has been on Supabase migrations, but it'll work with any Postgres database using `20250109104647_migration_name.sql` formatted migrations with some configuration adjustments.<p>Happy to accept PR or issues for other migration file formats (or even DBs).<p>Project: <a href="https://github.com/t1mmen/srtd">https://github.com/t1mmen/srtd</a><p>Would love to hear your thoughts, feedback, and ideas for improvement!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42643628">https://news.ycombinator.com/item?id=42643628</a></p>
<p>Points: 1</p>
<p># Comments: 3</p>
]]></description><pubDate>Thu, 09 Jan 2025 09:58:50 +0000</pubDate><link>https://github.com/t1mmen/srtd</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=42643628</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42643628</guid></item><item><title><![CDATA[New comment by t1mmen in "Ask HN: What's the one feature you'd want in a GitHub productivity tool?"]]></title><description><![CDATA[
<p>If you’re flexible on the time tracker to use, www.timely.com tracks GitHub activity (and so much more, entirely privately).<p>It works great for eliminating the «what did I actually work on X days ago?» problem (that used to be the bane of my existence)<p>Disclaimer: I work at Timely</p>
]]></description><pubDate>Tue, 03 Dec 2024 04:43:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=42303121</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=42303121</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42303121</guid></item><item><title><![CDATA[New comment by t1mmen in "Reports show some Canada euthanasia deaths driven by social reasons"]]></title><description><![CDATA[
<p>I’m grateful to have the option if and when the time comes. Even before that age, QoL needs to be of a certain level or possible to improve, else I’m unsubscribing.<p>Much preferred to, say, ættestup: <a href="https://youtu.be/DwD7f5ZWhAk?si=WjwnN7cZC1h7TcJU" rel="nofollow">https://youtu.be/DwD7f5ZWhAk?si=WjwnN7cZC1h7TcJU</a></p>
]]></description><pubDate>Sat, 19 Oct 2024 02:11:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=41885111</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=41885111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41885111</guid></item><item><title><![CDATA[New comment by t1mmen in "Pivotal Tracker will shut down"]]></title><description><![CDATA[
<p>+1. Linear is a great PM tool, maybe even the best. What makes it awesome is their support team. I’ve been in touch with them a handful of times over the past ~5 years, and each time, they’ve been excellent — fast response times, with genuine and tech savvy people on the other side.</p>
]]></description><pubDate>Thu, 19 Sep 2024 14:33:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41592351</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=41592351</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41592351</guid></item><item><title><![CDATA[New comment by t1mmen in "Ask HN: What single line of code would you put on a programming shirt?"]]></title><description><![CDATA[
<p>/* WIP */</p>
]]></description><pubDate>Mon, 17 Jun 2024 01:56:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=40701667</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=40701667</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40701667</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: Revert – Open-source unified API for product integrations"]]></title><description><![CDATA[
<p>Yeah, sorry, I just got caught up in your wording. Since you asked: "Nango <i>seems</i> to have more integrations" feels disingenuous, when you're comparing <i>4</i> to 100+. You'll likely be asked to compare yourself with Nango a lot, so it's not a bad idea to know what you're up against.<p>In any case, I wish you the best of luck with the "one model per resource type" concept you're trying. It's a tricky one, since you're usually stuck with the lower common denominator.<p>I expect many, if not most users will need additional custom mapping (so if "field A" -> "field B" mapping is the only option for now, expect to run into lots of feature requests that need to pick from objects/compute multiple values into one field. DX around this will be important)</p>
]]></description><pubDate>Tue, 24 Oct 2023 20:56:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=38005445</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=38005445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38005445</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: Revert – Open-source unified API for product integrations"]]></title><description><![CDATA[
<p>I love these kinds of products, and welcome any competition in the space. But, this comparison to Nango doesn't seem accurate, so I feel inclined to comment.<p>Please correct me if I'm wrong, but you say...<p>> Even though [Nango] seem to have more integrations<p>Nango has north of 100 integrations, Revert seems to have 4 atm?<p>> our integration support is better than them in terms of the depth of use-cases allowed (more standard objects supported, custom properties, field mapping support, custom objects (soon) etc).<p>How so?<p>Nango Sync gets you easy access to the raw API responses from the 3rd party service, and lets you map that to whatever shape/model you, as the implementer, want to end up with.<p>Revert seems to return standardized/normalized objects per data model (e.g, company, contact, task) across the 4 different integrations currently mentioned. It also seems to support "custom mapping" past the "lowest common denominator" schema, by adding `sourceFieldName` -> `targetFieldName` mappings (but seemingly only for picking out response key if they're strings, not any "pick from object", or "compute based on multiple properties"?)<p>Please don't take this as discouragement -- it's a great space to play in, and there's a lot of room for improvement. But, as a _very_ happy user of Nango over the past 10+ months, I feel you should compare yourself honestly at the very least.<p>Good luck!</p>
]]></description><pubDate>Tue, 24 Oct 2023 15:45:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=38000797</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=38000797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38000797</guid></item><item><title><![CDATA[New comment by t1mmen in "MSW 2.0 – Mock Service Worker"]]></title><description><![CDATA[
<p>Really cool setup, thanks for sharing!<p>After buying in to OpenAPI as the fundamental source of truth (generated via <a href="https://www.ts-rest.com" rel="nofollow noreferrer">https://www.ts-rest.com</a> contracts in my case), I have radically changed how I think about web development.<p>At this point, it's frankly absurd to me how many people out there make it so hard for themselves by manually building/typing/validating both client & server-side responsibilities in most typical REST setups. I get it -- I spent >2 decades in that reality, but no more. I will die on this hill.<p>I am likely understating the impact when I say I'm 2x as productive whenever I touch API related functionality/validation on client or server-side.<p>MSW, Zod, react-hook-form+ZodResolver and several other tools in the OpenAPI ecosystem are simply incredible for productivity. The project I'm on now is certainly the most fun I've ever  built because of these amazing tools.</p>
]]></description><pubDate>Tue, 24 Oct 2023 00:18:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=37993403</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37993403</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37993403</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: REST Alternative to GraphQL and tRPC"]]></title><description><![CDATA[
<p>Strong disagree.<p>The barrier you presume is that OpenAPI specs are hard to write. Raw oAPI in yaml is indeed a pain, but there are good DSL's out there.<p>I personally love Zod->OpenAPI, via <a href="https://ts-rest.com" rel="nofollow noreferrer">https://ts-rest.com</a> which uses  <a href="https://www.npmjs.com/package/@anatine/zod-openapi" rel="nofollow noreferrer">https://www.npmjs.com/package/@anatine/zod-openapi</a>. <a href="https://github.com/asteasolutions/zod-to-openapi">https://github.com/asteasolutions/zod-to-openapi</a> is another alternative for Zod.<p>> The big bonus of the human documentation approaches today is that time is somewhat combined with building the client.<p>This is wild to me; human documentation is absurdly error-prone and it's almost always and immediately out of date. (Zod or other DSL) -> OpenAPI -> generated docs (and types! and clients! and mocks!) are always going to be better; always accurate, and faster. The upfront cost is slightly higher, but the ROI is _significant_.<p>OpenAPI specs lend themselves to excellent docs, ala Mintify or Docusaurus. Even interactive ones, like Swagger UI. The vast majority of API browsers & tooling understands OAPI, so why re-create (an often incomplete) version of the truth when using those tools?<p>> Whatever is overall fastest and gets me on to the problems I'm really trying to solve.<p>You may start (slightly) faster, but you'll incur significant cost when you move past the "trivial implementation" stage.<p>For instance:<p>- Do you do request & response validation on the server? That'll often need duplication on the client (e.g, error messages, and once out of sync, client-side validation mismatches server-side response)<p>- Typescript on client & server? Then you're already doing the manual work (often more than once) that oAPI->types would get you for free.<p>- Implementing client-side XHR calls manually, and getting typing right, is a pretty significant undertaking. Multiply that by the number of client-side stacks the API will be consumed by. Or, just generate them via OAPI (or real-time infer via something like ts-rest)<p>- TS on client, but another BE stack? OpenAPI, when used right, ensures the "contract" is 1:1. When BE changes, client needs changing -- or it breaks. You want this safety.<p>- Manually mocking API responses is wasteful; write good oAPI specs and auto-generate mocks (e.g, MSW).<p>- Do you test the real API implementation? OpenAPI specs can help you do that automatically.<p>At this stage of my career, I would turn down a job offer from a company/team that wasn't willing to use OpenAPI or equivalent single-source-of-truth (*unless I'm in a truly desperate situation)</p>
]]></description><pubDate>Tue, 10 Oct 2023 17:37:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=37835032</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37835032</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37835032</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: REST Alternative to GraphQL and tRPC"]]></title><description><![CDATA[
<p>Good point, and one that counts towards ts-rest atm; If you're bringing your own OpenAPI spec, there is (not yet) an OpenAPI->Zod converter available.<p>The great thing about OAPI is there's _so much tooling_ available, but it can be daunting and very frustrating to find the "right one". I spent more hours than I'd care to count wading through the ecosystem,<p>Perhaps it'd be a good idea to promote a few tools via your project? I suspect many potential users would fall off early because they (imo wrongly) believe the upfront cost of writing the OAPI spec is too much to ask. I do understand the reaction if they don't know of good DSLs, though.<p>IMO, <a href="https://openapistack.co/docs/examples/building-apis/#writing-our-api-spec" rel="nofollow noreferrer">https://openapistack.co/docs/examples/building-apis/#writing...</a> would be a good place to add that.<p>PS: ts-rest's video on the front page is what immediately convinced me to try it out. Your current interactive example is nice, _but_ it doesn't product type errors for me so the value isn't as immediately obvious (I'm assuming watch doesn't work in the sandbox?).</p>
]]></description><pubDate>Tue, 10 Oct 2023 17:15:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=37834757</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37834757</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37834757</guid></item><item><title><![CDATA[New comment by t1mmen in "Show HN: REST Alternative to GraphQL and tRPC"]]></title><description><![CDATA[
<p>Cool to see more of these kinds of projects, nice work OP!<p>I'm a huge fan of this general concept, so you're definitely on the right path imo. That said, two things are jumping out at me:<p>- Users would still be writing OpenAPI specs/JSON Schema by hand, an incredibly annoying and tedious process (unless using a nicer DSL)<p>- Generation/build steps are annoying (but likely unavoidable here)<p>As pointed out by many other comments, an unfortunate amount of teams aren't writing OAPI specs. I personally feel this is a major mistake for anyone building an API, but that's a discussion for another day.<p>I've been using <a href="https://www.ts-rest.com" rel="nofollow noreferrer">https://www.ts-rest.com</a>, a similar project, for a few months now. Instead of relying on OpenAPI specs as the source, you define the "contracts" using Zod. These contracts are essentially OpenAPI specs, but Zod makes for a MUCH better DSL. I really like that...<p>- Real-time type checking without generator steps, both server & client-side. XHR clients like `fetch`, `react-query`, etc clients are inferred from the contract.<p>- The Zod contracts _can_ generate/output OpenAPI specs and Mock Service Worker mocks for testing (as needed, not required)<p>- (Optional) Automatic request & response validation based on Zod contract definitions, no additional code needed.<p>- (Node) Backend agnostic (partially, anyway: NextJS, Express, Nest and Fastify supported atm)<p>- Works very well with `react-hook-form` & `ZodResolver`, so e.g an invalid value on client-side shows the same error as the API would have if request were fired.<p>- Zod types can be used as typescript (z.infer), a wonderful way to re-use e.g model types in client-side components.<p>This ts-rest experience has fundamentally solidified a belief in me: One single source of truth, propagating through the system, is _the_ best way to build safely and efficiently.<p>I am almost ashamed to look back on the many, many projects I've worked on where APIs and client-side did not share truth. Duplication of (hand-rolled) types, error messages, etc is horrific in retrospect.<p>I don't want to think about the amount of bugs I've come across due to this dual (at best) truth approach.</p>
]]></description><pubDate>Tue, 10 Oct 2023 15:58:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=37833849</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37833849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37833849</guid></item><item><title><![CDATA[New comment by t1mmen in "Lessons from bootstrapped companies founded by software engineers"]]></title><description><![CDATA[
<p>In reality, most people are working core hours, say 10am-3pm local time. Most are in UTC +/- 2 hours. I’m an outlier, remote from B.C, Canada.<p>It’s usually best to stick with a “normal schedule” for family/socializing reasons, anyway.<p>But, it’s incredibly freeing, being able to work when the mood strikes. I used to be a night-owl, often getting super creative in the evenings. I could force myself to bed, sure, but a 3-4 hour stint in the evening would regularly produced outsized returns. 8-9am+ couldn’t remotely compete, creativity-wise, so why force it? Build a culture around trust and impact, it works out a lot better than anything else I’ve seen in practice.<p>I rarely do late nights anymore, having transitioned to 6-7am starts, an hour or two hiking around lunch with the dogs, and a small handful of hours of wrapping up & planning for tomorrow. But that was all my choice :)</p>
]]></description><pubDate>Mon, 09 Oct 2023 01:52:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=37816130</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37816130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37816130</guid></item><item><title><![CDATA[New comment by t1mmen in "Lessons from bootstrapped companies founded by software engineers"]]></title><description><![CDATA[
<p>Yes, everyone at my $WORKPLACE is free to adjust their work schedule to whatever best suits them; we don't care about ass-in-seat or hours of work, we care about output and impact.<p>This isn't just lip-service, either. May be hard to believe from a US perspective, but for a Norwegian based company, it can be taken at face value. It's the best place I've worked in my 22+ years.<p>Minor asterisk; we do have a few hours every week where you should be present (check-ins, meetings, all-hands, etc), but it's <5h/week for most people.</p>
]]></description><pubDate>Mon, 09 Oct 2023 01:04:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=37815846</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37815846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37815846</guid></item><item><title><![CDATA[New comment by t1mmen in "Lessons from bootstrapped companies founded by software engineers"]]></title><description><![CDATA[
<p>It’s blatantly obvious that the quote from the article isn’t talking about pushing to #main and potentially breaking production during the weekend. If a team practices true CI/CD, they surely have excellent safeguards and 1-click (if not automated) rollbacks in place.<p>I imagine the only people who would think otherwise have some pretty dysfunctional repo setups and/or policies.</p>
]]></description><pubDate>Sun, 08 Oct 2023 22:16:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=37814900</link><dc:creator>t1mmen</dc:creator><comments>https://news.ycombinator.com/item?id=37814900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37814900</guid></item></channel></rss>