{"id":51318022,"url":"https://github.com/thisago/seamlesserver","last_synced_at":"2026-07-01T09:31:50.306Z","repository":{"id":177481036,"uuid":"660448223","full_name":"thisago/seamlesserver","owner":"thisago","description":"A web template that backend and frontend are seamless connected!","archived":false,"fork":false,"pushed_at":"2023-09-25T11:09:33.000Z","size":393,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-02T04:17:54.585Z","etag":null,"topics":["backend","frontend","fullstack","nim","seamless","server","spa","template","web","web-template"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":false,"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/thisago.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-06-30T03:16:48.000Z","updated_at":"2024-05-02T04:17:54.587Z","dependencies_parsed_at":null,"dependency_job_id":"1e73ea27-e757-4455-96b3-2a05228fae02","html_url":"https://github.com/thisago/seamlesserver","commit_stats":null,"previous_names":["thisago/seamlesserver"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/thisago/seamlesserver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisago%2Fseamlesserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisago%2Fseamlesserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisago%2Fseamlesserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisago%2Fseamlesserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thisago","download_url":"https://codeload.github.com/thisago/seamlesserver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisago%2Fseamlesserver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35001648,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["backend","frontend","fullstack","nim","seamless","server","spa","template","web","web-template"],"created_at":"2026-07-01T09:31:48.899Z","updated_at":"2026-07-01T09:31:50.292Z","avatar_url":"https://github.com/thisago.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=center\u003e\n\u003cimg alt=\"seamlesserver Logo\" src=\"images/logo.png\" width=\"200\"\u003e\n\n# **seamlesserver**\n\n#### A web template that backend and frontend are seamless connected!\n\n**[About](#about) - [Stack](#stack) - [Features](#features) - [How it Works](#how-it-works) - [Getting started](#getting-started)** - [License](#license)\n\n---\n\n\u003e **Warning**\n\u003e This project isn't finished, the following screenshots are far away from the final version. Many features needs to be implemented and more tests need to be made.\n\n---\n\n\u003cimg width=400 title=\"Home - Logged out\" src=\"screenshots/homeLoggedOut.png\" /\u003e\n\u003cimg width=400 title=\"Login\" src=\"screenshots/login.png\" /\u003e\n\u003cimg width=400 title=\"Register\" src=\"screenshots/register.png\" /\u003e\n\u003c/div\u003e\n\n## About\n\nThis template implements a basic fullstack system seamless connected between backend and frontend.\n\nThe backend renders the **exactly** same page as backend, using **exactly** same model!\n\nThe page switching is made by Javascript, changing url adding to history with `history.pushState`. So you can browse with the speed of a SPA website or you can use the whole site without Javascript, thanks to SSR.\n\n## Stack (ProNoK?)\n\nThis template is built in [Nim language][nimlang] using the following library and frameworks:\n\n- **Web Framework**: [Prologue][prologue]\n- **ORM**: [Norm][norm]\n- **Backend HTML generation and SPA frontend framework**: [Karax][karax]\n\n## Features\n\n### Insanely fast\n\nAfter first load, the pages changes instantly with Karax\n\n### Just one page model\n\nYou can pre-render the pages in the server side and re-render the same model at browser with Javascript as a SPA!\n\n### Bridged data\n\nThe server sends to frontend a [`BridgedData`][bridgedDataDef] serialized as JSON and Javascript re-serialize it back to be ready to use.\n\n\n\n### User registration and login\n\nThere's a simple [`User`][userDef] implementation with following fields:\n\n- username\n- email\n- password\n\nThe user password is hashed using `bcrypt` hash, with a random salt for each user.\n\n### PWA\n\nBy default, this template is installable, and all SPA available routes are cached!\n\n## How it Works\n\n### Rendering\n\nThe HTML rendering models are defined at [seamlesserverpkg/renderer/routes](src/seamlesserverpkg/renderer/routes), everything is reused, even states objects are shared!\n\nThe renderer receives a reference to a [`State`][stateDef], it contains a instance of [`BridgedData`][bridgedDataDef] and a list of errors (flash messages). It returns an [`Rendered`][renderedDef], an object that contains the rendered `VNode` and the page title.\n\nThe server renders the page with a blank state, since it's on server side.\n\nWhen your browser receive the rendered webpage, it is just a static page, but the Javascript will re-render the page as a SPA application, using the same models defined in backend.\n\nThe SPA will change the pages without reloading and the state will be preserved, and even if you reload the page, the state will be stored in your browser's LocalStorage.\n\n## Getting started\n\n### Dependencies\n\n```bash\nnpm install -g sass\n```\n\n### Setup\n\nBefore start, rename the whole project with:\n\n```bash\n$ nimble rename_project myFullstackApp\n```\n\nKeep in mind that it'll rename the whole project as many times you want.\n\n### Running\n\nAnd to run is extremely simple!\n\n```bash\n$ nimble r # build and run, for development purposes\n```\n\nThe above command will compile the javascript, create `.env` and `public/` in\n`build/` if not exists, then compile and run the server!\n\nBut if you want to compile and run just the server, just run:\n\n```bash\n$ nimble build_server # development build\n# or\n$ nimble build_server_release # production build\n\n# and\n$ nimble run_server # run it\n```\n\nOr if you want to compile just the Javascript, run:\n\n```bash\n$ nimble build_js # development build\n# or\n$ nimble build_js_release # production build\n```\n\n## License\n\nThis template is free and open source software licensed over MIT license.\n\n\u003c!-- Refs --\u003e\n\n[nimlang]: https://nim-lang.org \"Nim Language official website\"\n[karax]: https://github.com/karaxnim/karax\n[bridgedDataDef]: ./src/seamlesserverpkg/renderer/base/bridgedData.nim\n[stateDef]: ./src/seamlesserverpkg/renderer/base/state.nim\n[renderedDef]: ./src/seamlesserverpkg/renderer/base/rendered.nim\n[bcrypt]: https://github.com/nim-lang/checksums/blob/master/src/checksums/bcrypt.nim\n[prologue]: https://github.com/planety/prologue\n[norm]: https://github.com/moigagoo/norm\n[userDef]: ./src/seamlesserverpkg/db/models/user.nim#L10\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisago%2Fseamlesserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthisago%2Fseamlesserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisago%2Fseamlesserver/lists"}