Then you think about all that time doing this could have been spent in actual business logic and it makes no sense to me anymore.
We wouldn't be the best fit for all of these, but here are some:
- Validations: handled already by Postgres and if you use JSONB you can use pg_jsonschema[0]
- Translations: probably won't ever be part of our stack, but for multilingual FTS we offer the pgroonga extension[1]
- Permissions: we offer AuthN (email & social logins, MFA, SSO) [2] and AuthZ with Postgres RLS[3]
- Background jobs: pg_cron [4]
- Caching: For images we have a smart cache [5]. We'll extend this to database queries over time
- File uploading: supabase storage [6]
[0] pg_jsonschema: https://supabase.com/blog/pg-jsonschema-a-postgres-extension...
[1] pgroonga: https://pgroonga.github.io/
[2] AuthN: https://supabase.com/docs/guides/auth/overview
[3] AuthZ with Postgres RLS: https://supabase.com/docs/guides/auth/row-level-security
[4] pg_cron: https://supabase.com/docs/guides/database/extensions/pgcron
[5] smart image cache: https://supabase.com/blog/storage-image-resizing-smart-cdn#s...
[6] supabase storage: https://supabase.com/storage
- Validations
- Translations
- Error and request logging and auditing
- Security (CQRS, CORS, CSRF)
- Permissions and a way to integrate it with your authentication (does supabase handle this? don't know)
- Email sending
- Background jobs
- Caching
- File uploading
- Rate limiting
- ...
Every time somebody suggests "just" Next.js, just "Remix", just "flask" or just [insert minimalist framework] I think they're either building something pretty trivial, or wasting a lot of time on rebuilding or integrating things you get for free with batteries included frameworks.