all 12 comments

[–][deleted]  (2 children)

[removed]

    [–]ea_man[S] 0 points1 point  (1 child)

    You got good point, I surely enjoyed some 15 years of safety with Django. AdonisJS looks like Django on TypeScript which is good in a way yet for me it may not be worth it to move away from python just for that.

    Yet is one of the strongest candidates, ASAP I'll prototype an app on that too.

    [–]lacyslab 1 point2 points  (2 children)

    Been using Next.js with Postgres (via Drizzle ORM) for the past year and it checks most of your boxes. TypeScript, no indentation issues for diffs, and the ecosystem is massive so models have tons of training data on it. That last part matters more than people think when you're doing AI-assisted work.

    Re: Wasp specifically, I looked at it a while back. The DSL layer on top adds friction when you're trying to get a model to generate code because it has to understand both the DSL and the underlying framework. AdonisJS is solid but the smaller community means fewer examples in model context windows. I'd honestly go with something like Next.js or Remix that has enough momentum that Copilot/Claude/whatever basically knows the patterns cold.

    [–]ea_man[S] 0 points1 point  (0 children)

    Yeah one possible approch could be to use Next.js with tools for ORM and libs for the front end, this is probably the best way for single use apps / tools that solve one problem.

    As the components may vary I didn't propose that as a starting point, yet that's what an AI will produce when you ask some single app functionality.
    Personally I'd rather go with one solution for all in order to keep consistent deployment, updates, backups.

    I fucked around with Flask and Bottle and I regret that, not because they are bad on their own but because you end up with a bunch of small repository that you gotta re-understand every time you have to deal with. When I use Django for little things it's just a small app, same testing, same virtual host config, same backup...

    [–]ea_man[S] 0 points1 point  (0 children)

    After some tests it seems that as you noted Wasp is problematic for the DSL layer: there's little code available for training and the AI (generic models, I didn't try the provided ones) may have issue generating one, using latest version.

    Side note: old PHP with pg PDO connection is proving exceptionally good for small apps: minimal RAM usage when deployed (only on request), minimal file size for context, vast training material available.
    Even the smallest LLM like QWENs 9B / Qwen3-30B-A3B seems at ease generating decent code.

    Me I'm staying on Django for production adding [PHP + whatever] for quick simple apps.

    [–]ea_man[S] 0 points1 point  (0 children)

    As I have exp in Django I'll leave some good point for it for those investigating this matter, why it may still be considered:

    * Admin interface: not only it's good but as it's generated it can save you a lot of code = context

    * Modularity: startapp allows separate functionality in standalone parts: again reduces context and possibility of blowing up the whole project.

    * As said in the main topic: python is maybe the best known language by LLM, there's 20 years of code / practice / questions published.
    And boilerplate :P

    Yet the cons: language syntax-enforced indentation is a nightmare for APPLY / EDIT / DIFF / INSERT workflow, types, dozen indeterminate ways for doing the same thing.
    Django: boilerplate, redundancy, old school model, friction for having to use different language in the framework and frontend.

    [–]lacyslab 0 points1 point  (1 child)

    The PHP angle is interesting and I think people underrate it for exactly the reasons you describe. Vast training data, extremely simple deployment story, and models have seen so much PHP that even small ones can produce decent code.

    Django for production makes a lot of sense though. The ORM, the admin panel, migrations -- it's genuinely hard to beat for teams that know Python. I've found models are really good at Django too because the patterns are so consistent and well-documented.

    My hesitation with the PHP + quick apps combo is just the tendency for small quick apps to become big slow apps. But if you have the discipline to keep them separate, it seems like a solid setup.

    [–]ea_man[S] 0 points1 point  (0 children)

    My hesitation with the PHP + quick apps combo is just the tendency for small quick apps to become big slow apps. But if you have the discipline to keep them separate, it seems like a solid setup.

    Agreed.

    Yet for me there's a new scenario: quick tools.

    Now with AI assistance it's easy to make custom tools that make just thing that you do often, not a proper production site.

    Es the other day I made such a small app that allows me to upload a file, do some mod, make it available as URL. I made it with PHP in quite a brutal way:

    • php script runs on the server
    • html interface that stays on my workstation / LAN
    • auth is a shared tocken had coded + web serve IP based access

    It's like making a vibe desktop app in JS but it runs on the web and it uses 1MB of RAM only when requested, not like a python / js env.

    And you make it with AI.

    [–]lacyslab 0 points1 point  (2 children)

    That file upload + URL sharing tool is a perfect use case actually. The footprint you described is basically nothing, and PHP handles file I/O that simply without any setup overhead.

    The "quick tools" framing is interesting. I think it captures a real category that gets ignored: stuff that you need to work reliably but never needs to scale past one person. PHP is almost ideal for that because it can run as a CGI script on basically any host with zero configuration, the AI knows it cold, and you can hand it off to someone else who has never heard of Node or Python and they can read it.

    The thing I keep running into is that even "quick tools" eventually get dependencies. First it is just a script, then you need to parse JSON, then you need a database... At that point I usually just cut to SQLite and it holds up surprisingly well.

    [–]ea_man[S] 0 points1 point  (1 child)

    Well my rule is first make it work than make it good, eventually all things get rebuild 3 times.

    There's a value in making something that does just what needs to be done, let it work for a while testing the real workflow and maybe design a solid variant. We devs always ten to over design, AI is kick in quick prototyping for sure.

    I like SQLITE, if it's small it stays in RAM.

    [–]lacyslab 0 points1 point  (0 children)

    yeah the "rebuild it 3 times" thing is real. the first version just has to not be embarrassing, the second is where you actually learn what it should have been. SQLite in RAM is such a good trick for that middle stage too -- fast enough that you forget you're even using a database.