{
  buildNpmPackage,
  fetchFromGitHub,
  nodePackages,
  lib,
  writeShellScriptBin,
  pkgs,
}: let
  schemaEngine = "${pkgs.prisma-engines}/bin/schema-engine";
  queryEngineBin = "${pkgs.prisma-engines}/bin/query-engine";
  queryEngineLib = "${pkgs.prisma-engines}/lib/libquery_engine.node";
  buildFlags = ["--ignore-scripts"];
in
  buildNpmPackage {
    pname = "spliit2";
    version = "master-20250420";

    src = fetchFromGitHub {
      repo = "spliit";
      owner = "spliit-app";

      rev = "a11efc79c13298c0d282e47496d132538752405f";
      hash = "sha256-v4gaPzLzBbbqw/LDYxe1fiyficcrqcGOop23YPiTrdc=";
    };

    npmDepsHash = "sha256-sd0/7ruNUFxUKTeTwx/v8Vc/G3llkXP6RSDE78h3qVU=";

    nativeBuildInputs = [pkgs.openssl];

    npmRebuildFlags = buildFlags;

    PRISMA_SCHEMA_ENGINE_BINARY = schemaEngine;
    PRISMA_QUERY_ENGINE_BINARY = queryEngineBin;
    PRISMA_QUERY_ENGINE_LIBRARY = queryEngineLib;

    preBuild = ''
      cp -v scripts/build.env .env

      npx prisma generate
    '';

    npmBuildFlags = buildFlags;

    postInstall = ''
      cp -r .next public package.json next.config.mjs $out/lib/node_modules/spliit2

      install -Dvm755 -t $out/bin ${lib.getExe (writeShellScriptBin "spliit2" ''
        set -euxo pipefail

        cd @out@/lib/node_modules/spliit2

        export PATH="$PWD/node_modules/.bin:$PATH"
        export NEXT_TELEMETRY_DISABLED=1

        export PRISMA_SCHEMA_ENGINE_BINARY="${schemaEngine}"
        export PRISMA_QUERY_ENGINE_BINARY="${queryEngineBin}"
        export PRISMA_QUERY_ENGINE_LIBRARY="${queryEngineLib}"

        prisma migrate deploy
        next start
      '')}

      substituteInPlace $out/bin/spliit2 \
        --replace @out@ $out

      wrapProgram $out/bin/spliit2 \
        --prefix PATH : ${lib.makeBinPath [pkgs.openssl]}
    '';

    meta = {
      description = "Free and Open Source Alternative to Splitwise. Share expenses with your friends and family.";
      homepage = "https://spliit.app";
      license = lib.licenses.mit;
      maintainers = with lib.maintainers; [];
    };
  }
