{"id":14968853,"url":"https://github.com/changenode/spring-boot-supabase","last_synced_at":"2025-10-26T05:30:46.321Z","repository":{"id":40500373,"uuid":"404439800","full_name":"ChangeNode/spring-boot-supabase","owner":"ChangeNode","description":"Modern Java web application starter template.","archived":false,"fork":false,"pushed_at":"2023-04-04T01:03:05.000Z","size":3625,"stargazers_count":158,"open_issues_count":5,"forks_count":26,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-10-29T18:05:38.557Z","etag":null,"topics":["java","pinegrow","spring-boot","supabase"],"latest_commit_sha":null,"homepage":"https://changenode.com/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ChangeNode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"wiverson"}},"created_at":"2021-09-08T17:37:41.000Z","updated_at":"2024-10-21T16:56:36.000Z","dependencies_parsed_at":"2024-08-03T17:04:02.952Z","dependency_job_id":"750f60f6-c1fa-4937-8a66-bad9c4b13fd7","html_url":"https://github.com/ChangeNode/spring-boot-supabase","commit_stats":null,"previous_names":["changenode/frisson"],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChangeNode%2Fspring-boot-supabase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChangeNode%2Fspring-boot-supabase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChangeNode%2Fspring-boot-supabase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ChangeNode%2Fspring-boot-supabase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ChangeNode","download_url":"https://codeload.github.com/ChangeNode/spring-boot-supabase/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238264674,"owners_count":19443388,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","pinegrow","spring-boot","supabase"],"created_at":"2024-09-24T13:40:42.500Z","updated_at":"2025-10-26T05:30:45.300Z","avatar_url":"https://github.com/ChangeNode.png","language":"HTML","readme":"# Easy, Powerful Full Stack Spring Boot\n\nBuild slick, fast Spring Boot full stack web applications easily as a solo developer.\n\nThis project is specifically designed to make it easy to build a modern web application with Spring Boot.\n\nHere's a list of features:\n\n- Uses [Supabase.io](https://supabase.io) as the core for RDBMS, auth, storage.\n    - [Supabase is an open source platform](https://github.com/supabase/supabase) that offers\n      hosted [Postgres](https://www.postgresql.org/) with built-in integration with a variety of services, including\n      [simplified authentication](https://supabase.io/docs/guides/auth)\n      and [storage](https://supabase.io/docs/guides/storage).\n    - This project specifically uses Supabase for auth (including seamless Spring Security support!) and as a hosted\n      Postgres instance.\n    - There's a lot more on Supabase later in this document. :)\n- Because Supabase is just Postgres, that means you can use all of [IntelliJ's](https://www.jetbrains.com/idea/) RDBMS\n  features, including [JPA Buddy](https://www.jpa-buddy.com/).\n    - This means that everything is type-aware (auto-complete FTW!) from the RDBMS through the Java code and into the\n      Thymeleaf templates!\n- Reconfigured the [Thymeleaf](https://www.thymeleaf.org/) settings for compatibility\n  with [Pinegrow](https://pinegrow.com/) visual HTML builder\n- Uses [Bootstrap](https://getbootstrap.com/) as a default CSS framework\n    - Drop in a [new Bootstrap theme](https://github.com/thomaspark/bootswatch) with minimal fuss!\n    - If you want to switch to TailwindCSS instead, no big deal.\n- Use [HTMX](https://htmx.org/) and Thymeleaf Fragments to provide\n  [rich, dynamic partial page updates](https://changenode.com/articles/easy-full-stack-java)\n  without using any complicated JavaScript frameworks.\n- Stateless by default - uses [Supabase JWT](https://supabase.io/docs/learn/auth-deep-dive/auth-deep-dive-jwts) for\n  authorization, so the project defaults to turning off Java sessions to improve ease of scaling.\n    - TIP: Use service level [Spring Boot caching](https://spring.io/guides/gs/caching/) instead of the antiquated\n      session API to take the load of a database instead the session API.\n\n# Screenshots\n\nThe default theme is the open source Bootstrap\ntheme [Darkly](https://github.com/thomaspark/bootswatch/tree/v5/dist/darkly), which just happens to be very similar to\nthe default Supabase theme. You can swap in another theme (e.g. another [Bootswatch](https://bootswatch.com/) theme) or\nbuild your own via SASS or the Pinegrow Design editor.\n\n## Basic Features\n\n![Home Screen](src/main/site/home-screen.png)\n\nThe default home screen displayed to the user.\n\n![Sign In](src/main/site/sign-in.png)\n\nLog in with either a social provider or email/password. Supabase supports\nmany [other providers](https://supabase.io/auth)!\n\n![Create Account](src/main/site/create-account.png)\n\nCreate an account quickly and easily. Supabase sends the various emails (confirmation, forgot password) for you. If you\nwant to use your own SMTP server, pop in the SMTP credentials into Supabase.\n\n![Forgot Password](src/main/site/forgot-password.png)\n\nThis project includes the JavaScript to handle the forgot password flow.\n\n![Logged In User](src/main/site/logged-in-user.png)\n\nLogged in Supabase information is available both via standard Spring Security (via principal) and via a bean wrapper (\nmakes it easier to work with in Thymeleaf).\n\n## Thymeleaf Visual Editing\n\n![Create Account](src/main/site/pinegrow-create-account.png)\n\nShows how the Create Account page can be viewed visually. Use the Pinegrow built-in HTML code editor or tab back and\nforth with IntelliJ.\n\n![Master Layout](src/main/site/pinegrow-master-layout.png)\n\nThis is the master layout used throughout the template. Also can be edited visual and/or via code editor.\n\n![Mobile and Bootstrap Blocks](src/main/site/pinegrow-mobile-bootstrap-blocks.png)\n\nPinegrow handles responsive design quickly and easily. Just press a single keystroke to view the different breakpoints.\nVisually assign styling based on breakpoints.\n\n# Getting Started\n\n## Basics\n\nYou'll need Java 16+ and Maven.\n\n## Supabase\n\nYou will need to set up a new [Supabase.io](https://supabase.io/) project. You can start with the free starter version.\nEventually you can switch to either a [paid account](https://supabase.io/pricing) or set up your\nown [self-hosted version](https://supabase.io/docs/guides/self-hosting).\n\n## Configuration\n\nSet the following environment values so Maven and Spring Boot can find them. Tip: if you declare them in a .profile on\nmacOS, IntelliJ will pick them up.\n\n| VALUE | Typical Values |\n| ----- | --- |\n| `SUPABASE_DATABASE_URL` | jdbc:postgresql://db.PROJECT.supabase.co/postgres |\n| `SUPABASE_DATABASE_USER` | postgres |\n| `SUPABASE_DATABASE_PASSWORD` | Same as your Supabase login password. |\n| `SUPABASE_URL` | https://PROJECT.supabase.co |\n| `SUPABASE_ANON_KEY` | A JWT with the role of anon. Verify it at https://jwt.io/ |\n| `SUPABASE_JWT_SIGNER` | The TOP SECRET key used for signing JWT from Supabase. DO NOT SHARE THIS - anyone who has this can create new identity JWTs - basically, this is a super password that would allow anyone to impersonate anyone on the site! |\n\n## Database\n\nBy default, this template points to the Supabase table and expects to find a user table and a todo table. If you are\nplaying around, you might want to try creating a matching table. Otherwise, just go ahead and delete\nthe [todo entity and query files](https://spring.io/guides/gs/accessing-data-jpa/):\n\n`src/main/java/com/changenode/frisson/data/ToDo.java`\n`src/main/java/com/changenode/frisson/query/TodosEntityQuery.java`\n\n## IntelliJ Setup\n\nThis project uses the src/main/resources/public directory to store the html files.\n\n![IntelliJ Web Module Setup](src/main/site/intellij-web-module-setup.png)\n\nIn IntelliJ, make sure you set up the Web module to point at src/main/resources/public directory. Otherwise you will get\nerrors related to paths in IntelliJ.\n\n# Help\n\nThis entire project is built on top of a large number of well-documented open source projects, such as Spring Boot,\nBootstrap, Postgres, Thymeleaf, Supabase, and HTMX, just to name a few. Most of your issues or questions are probably\ngoing to be solved by the usual combination of the project documentation, Google, Stack Overflow, etc.\n\nThat said, here are some options specific to this project:\n\n- Check out the [discussion board](https://github.com/ChangeNode/frisson/discussions).\n- File an [issue](https://github.com/ChangeNode/frisson/issues).\n\nIf you need consulting support, [feel free to reach out](https://changenode.com/contact).\n\n# Additional Supabase Information\n\n## Supabase PostREST and Spring Boot\n\nBy default, Supabase makes data available to the browser using [PostREST](https://postgrest.org/) - an application that\nautomatically generates REST endpoints for a relational database.\n\nJava web frameworks, on the other hand, usually connect directly to the database.\n\nWhich is better? If you are a Java developer used to working with Spring Boot and Spring data repositories, just use\nthat. Keep your tables private in Supabase connect just like you would with any ordinary Postgres instance.\n\nIf you want to use PostREST, that's fine - just be absolutely sure you are setting up row-level security correctly!\n\n# Remember Me\n\nThe \"Remember Me\" setting in the login user interface, if checked, will store the JWT in a cookie, which will then allow\nthe server to immediately render the logged-in user as long as the JWT has not expired.\n\nThe default for JWT tokens on Supabase is 3600 seconds (1 hour). As long as the user is actively clicking around on the\nwebsite, the Supabase.js client will automatically refresh with new JWT tokens.\n\nThis means, however, that the \"Remember Me\" feature will only work for up to 1 hour. If you want to extend this, go to\nthe Authentication -\u003e Settings -\u003e JWT Expiry and change it to something longer. The maximum setting allowed (one week)\nmeans that as long as the user logs into the site at least once a week, they will effectively never have to log in\nagain.\n\nThe only downside is that you can't easily revoke a JWT once issued. So, if you extend the JWT session, that's the login\ntime. If you want to implement some kind of instant user ban, you can still use JWT but you will need to add additional\nlogic.\n\n# More Information\n\n### Bootstrap Themes\n\nThis project uses the Bootstrap 5.1 theme from:\n\nhttps://github.com/thomaspark/bootswatch/tree/v5/dist/darkly\n\nYou can drop in other themes from:\n\nhttps://github.com/thomaspark/bootswatch/\n\nOr you can use the built-in Pinegrow SASS compiler to build your own Bootstrap themes.\n\n### SVG Icons\n\nThe SVG Icons in this project are from:\n\nhttps://ionic.io/ionicons\n\n### Reference Documentation\n\nFor further reference, please consider the following sections:\n\n* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)\n* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.5.3/maven-plugin/reference/html/)\n* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.5.3/maven-plugin/reference/html/#build-image)\n* [Spring Boot DevTools](https://docs.spring.io/spring-boot/docs/2.5.3/reference/htmlsingle/#using-boot-devtools)\n* [Spring Web](https://docs.spring.io/spring-boot/docs/2.5.3/reference/htmlsingle/#boot-features-developing-web-applications)\n* [Thymeleaf](https://docs.spring.io/spring-boot/docs/2.5.3/reference/htmlsingle/#boot-features-spring-mvc-template-engines)\n* [Spring Data JPA](https://docs.spring.io/spring-boot/docs/2.5.3/reference/htmlsingle/#boot-features-jpa-and-spring-data)\n\n### Guides\n\nThe following guides illustrate how to use some features concretely:\n\n* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)\n* [Handling Form Submission](https://spring.io/guides/gs/handling-form-submission/)\n* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/)\n\n","funding_links":["https://github.com/sponsors/wiverson"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangenode%2Fspring-boot-supabase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchangenode%2Fspring-boot-supabase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchangenode%2Fspring-boot-supabase/lists"}