Hacker News new | past | comments | ask | show | jobs | submit | domlebo70's comments login

Gotta say, that animation is amazing.

Hey. Well done on launch. Looks very sleek. So the frontend is some sort of JS/CSS app. How did you get it so native looking? What UI libs are you using, or just tailwind classes?


Hey, thanks for the kind words! I’m glad you like the design. It’s a mix of Tailwind CSS and Tauri to achieve that "native" look. Using Tauri helps me access some OS features to create effects like the “glass/translucent effect” If you have any more questions, feel free to ask!


Thanks. I am about to start an app using Tauri, and styling the UI so it doesn't feel like a "web app" is a concern of mine


This is great. I run a very very similar platform. How are your prices so cheap? 120$ for 500 studies a year?


S3 is really cheap, and from the beginning I spent a lot of time optimizing for simplicity and efficiency, so I don’t have much overhead. Since this is targeted towards residents and academic radiologists, it’s important to me to keep the price as low as possible. What is your platform if you don’t mind sharing?


I had never heard of inverseMap. I suppose it only works where every variant can only be parsed in the same way it is rendered.


This is a formal property of a function, called an injective function: https://en.wikipedia.org/wiki/Injective_function


To OP: You could avoid the visitor by using an IIFE style switch using the run utility fn:

    export const run = <T>(f: () => T): T => f();
Now you can go:

    const inferred_type = run(() => {
      switch(blah) {
        ...
      }
    })


Exactly! I wrote a post about this pattern: https://maxgreenwald.me/blog/do-more-with-run


Yeah this is where I heard about it :P I showed all my dev friends, and our minds were equally blown away by the obviousness of it.


You don't even need to do this much, you can just invoke the function and let the return type be inferred.

  const inferred = (() => "Hello")() // Inferred as "string"

If you really don't want to use an IIFE because you don't like the "()" at the end, you can just:

  const myFn = () => { switch(...) }
  const inferred = myFn()


YousefED, love Blocknote, but I ended up not using it for a new project, just because it's too prescriptive. Which I totally get is a positive for many. I.e they want the UI and controls built in and off the shelf. I would love to just use the Core API (block etc) and get some useful hooks, so I can extend it in my own ways


Thanks for the feedback! It was designed from the philosophy that existing frameworks like PM or even TipTap are too low-level - but I can understand you need more ways to customize UI elements. It's certainly possible, but I think we need to document it better


Alex! Great to see you on HN.


Hey mate!!


Cube.js originally allowed embedding the app within an express server as just another route. They took this away and insist on using their Docker deployment approach. I'm still using the original versions that support this.


Are you able to disclose the price Duolingo paid for a 4k MRR bootstrapped app?


It was a mix of cash and stock options which vested over a few years. There was a confidentiality clause in the contract so I can't be super specific. But I asked ChatGPT what a typical price per employee is in an acquihire and it gives the following answer. I'll just say that the common range it gives doesn't sound crazy to me.

> In general, the price per employee in an acquihire can range from $100,000 to over $1 million, with a more common range being between $250,000 and $500,000 per employee.


Works great. I am getting odd refreshes when using it however


I should have error reporting for that and can look into it. Thanks for the heads up!


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: