{"id":13406532,"url":"https://github.com/fulls1z3/universal","last_synced_at":"2025-04-13T07:51:25.668Z","repository":{"id":25154838,"uuid":"86331796","full_name":"fulls1z3/universal","owner":"fulls1z3","description":"Seed project for Angular Universal apps featuring Server-Side Rendering (SSR), Webpack, CLI scaffolding, dev/prod modes, AoT compilation, HMR, SCSS compilation, lazy loading, config, cache, i18n, SEO, and TSLint/codelyzer","archived":false,"fork":false,"pushed_at":"2023-01-07T06:48:24.000Z","size":6603,"stargazers_count":703,"open_issues_count":27,"forks_count":140,"subscribers_count":35,"default_branch":"master","last_synced_at":"2025-04-04T05:42:24.382Z","etag":null,"topics":["angular","angular-cli","aot","cache","config","hmr","i18n","isomorphic","javascript","lazy-loading","ngrx","scss","seed","seo","server-side-rendering","starter","state","typescript","universal","webpack"],"latest_commit_sha":null,"homepage":"http://ng-seed.fulls1z3.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ng-seed/universal","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fulls1z3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2017-03-27T12:19:19.000Z","updated_at":"2025-02-27T06:10:02.000Z","dependencies_parsed_at":"2023-01-14T02:15:19.476Z","dependency_job_id":null,"html_url":"https://github.com/fulls1z3/universal","commit_stats":null,"previous_names":["ng-seed/universal"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulls1z3%2Funiversal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulls1z3%2Funiversal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulls1z3%2Funiversal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fulls1z3%2Funiversal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fulls1z3","download_url":"https://codeload.github.com/fulls1z3/universal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248681494,"owners_count":21144700,"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":["angular","angular-cli","aot","cache","config","hmr","i18n","isomorphic","javascript","lazy-loading","ngrx","scss","seed","seo","server-side-rendering","starter","state","typescript","universal","webpack"],"created_at":"2024-07-30T19:02:32.831Z","updated_at":"2025-04-13T07:51:25.643Z","avatar_url":"https://github.com/fulls1z3.png","language":"TypeScript","readme":"# universal\n\n\u003c!-- prettier-ignore-start --\u003e\n[![CircleCI](https://circleci.com/gh/fulls1z3/universal.svg?style=shield)](https://circleci.com/gh/fulls1z3/universal)\n[![coverage](https://codecov.io/github/fulls1z3/universal/coverage.svg?branch=master)](https://codecov.io/gh/fulls1z3/universal)\n[![Code Quality: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/fulls1z3/universal.svg?logo=lgtm\u0026logoWidth=18)](https://lgtm.com/projects/g/fulls1z3/universal/context:javascript)\n[![Total Alerts](https://img.shields.io/lgtm/alerts/g/fulls1z3/universal.svg?logo=lgtm\u0026logoWidth=18)](https://lgtm.com/projects/g/fulls1z3/universal/alerts)\n[![Greenkeeper badge](https://badges.greenkeeper.io/fulls1z3/universal.svg)](https://greenkeeper.io/)\n[![Join the chat at https://gitter.im/fulls1z3-universal](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/fulls1z3-universal/lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003e Please support this project by simply putting a GitHub star. Share this library with friends on twitter and everywhere else you can.\n\n**`universal`** is a seed project for Angular Universal apps following the common patterns and [best practices](https://angular.io/styleguide)\nin file and application organization, providing the following features:\n\n- [x] Providing a seed project using the [Angular] framework.\n- [x] **NEW**: Extending workspace/monorepo capabilities by [Nx]!\n- [x] Includes [ngrx-powered] **CRUD feature** tutorial.\n- [x] Compiling bundles for both browser (_SPA_) and server ([Angular Universal]) platforms.\n- [x] Rebased on [Angular CLI] to focus on features and development productivity, not on build tools.\n- [x] Customizable webpack configuration via [@angular-builders].\n- [x] Using the modern **UI components** of [Angular Material].\n- [x] Dynamic **responsive** layouts via [flex-layout].\n- [x] Built-in **Hot Module Replacement** to save valuable development time.\n- [x] Development, staging and production modes.\n- [x] Performing [AoT compilation] for rapid page loads on staging/production builds.\n- [x] Tree-shaking and minifying the production builds using [Angular Devkit].\n- [x] Cross-browser **[SCSS]** with [autoprefixer] and [browserslist].\n- [x] **[stylelint-config-standard]** as configuration preset for [stylelint] and **custom rules** to standardize stylesheets.\n- [x] Transferring server responses on client bootstrap to prevent app flickering with native [TransferState]`.\n- [x] Deferring initialization of modules via [Lazy loading].\n- [x] Uses [ngrx/store] for **state management**.\n- [x] **NEW** Uses [ngrx/entity] state adapter to **manipulate** and **query** entity collections.\n- [x] **NEW** Uses [ngrx/effects] side effect model to to model **event sources** as **actions**.\n- [x] **NEW** Uses [unionize] for **boilerplate-free** functional sum types.\n- [x] Uses **[ngx-config]** for configuration management.\n- [x] Uses **[ngx-auth]** for basic JWT-based authentication (_w/Universal support_).\n- [x] Uses **[ngx-cache]** for application-wide caching.\n- [x] Uses [ngx-translate] for i18n support.\n- [x] Uses **[ngx-meta]** for SEO (_title, meta tags, and Open Graph tags for social sharing_).\n- [x] Uses [ngx-perfect-scrollbar] for scrollbars.\n- [x] Vendor-agnostic analytics via [angulartics2].\n- [x] Unit tests with **[Jest]**, including code coverage.\n- [x] Seamless integration with [CircleCI] continuous integration and delivery platform.\n- [x] **[angular-tslint-rules]** as configuration preset for [TSLint] and [codelyzer].\n\nYou can view the **live app** at [http://universal.buraktasci.com](http://universal.buraktasci.com).\n\n## Table of contents:\n\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n  - [Setting up upstream repository](#setting-up-upstream-repository)\n  - [Development and builds](#development-and-builds)\n- [Contributing](#contributing)\n- [License](#license)\n\n## \u003ca name=\"getting-started\"\u003e Getting started\n\n### \u003ca name=\"installation\"\u003e Installation\n\nYou can install **`universal`** by simply forking the repo:\n\n```\n# clone the repo\n$ git clone https://github.com/fulls1z3/universal.git [your-project-name]\n$ cd [your-project-name]\n```\n\n### \u003ca name=\"setting-up-upstream-repository\"\u003e Setting up upstream repository\n\nOnce you have cloned the repo, you can follow these steps to allow sync changes made in this repo with your fork:\n\n```\n# set up `origin`\n$ git remote set-url origin [your-fork-repo]\n\n# set up `upstream` to sync future changes\n$ git remote add upstream https://github.com/fulls1z3/universal.git\n\n# verify the upstream repo specified for your fork\n$ git remote -v\norigin    https://github.com/YOUR_USERNAME/[your-fork-repo].git (fetch)\norigin    https://github.com/YOUR_USERNAME/[your-fork-repo].git (push)\nupstream  https://github.com/fulls1z3/universal.git (fetch)\nupstream  https://github.com/fulls1z3/universal.git (push)\n\n# initial push for the fork\n$ git push\n```\n\nNow, you can create a new directory (ex: `src/app/shared`) to build your codebase out, while benefiting from the\nclient framework located at the `src/app/framework` directory.\n\nIn order to merge the latest upstream changes, simply follow:\n\n```\n# fetch the latest upstream\n$ git fetch upstream\n\n# merge the upstream changes\n$ git merge upstream/master\n```\n\nthen handle any conflicts, and go on with building your app.\n\n### \u003ca name=\"development-builds\"\u003e Development and builds\n\nBelow are the scripts to dev, build, and test this seed project:\n\n#### Install dependencies\n\n```console\n# use `yarn` to install the deps\n$ yarn\n```\n\n#### Development server\n\n```\n# dev server\n$ ng serve\n\n# dev server (HMR-enabled)\n$ ng serve --c hmr\n\n# dev server (AoT compilation)\n$ ng serve --prod\n\n# dev server (SSR)\n$ yarn start:ssr\n\n# dev server (SSR \u0026 AoT compilation)\n$ yarn start:ssr:prod\n```\n\nAnd then,\n\n- Navigate to `http://localhost:4200/` for the SPA (browser) build.\n- Navigate to `http://localhost:4000/` for the SSR (universal) build.\n\nThe app will automatically re-compile if you change any of the source files.\n\n#### Build\n\n```\n# development build\n$ ng build\n\n# production build\n$ ng build --prod\n\n# development build (SSR)\n$ yarn build:ssr\n\n# production build (SSR)\n$ yarn build:ssr:prod\n```\n\nThe build artifacts will be stored in the `dist/` directory.\n\n#### Running tests\n\n```\n# run unit tests\n$ ng test\n```\n\n## \u003ca name=\"contributing\"\u003e\u003c/a\u003e Contributing\n\nIf you want to file a bug, contribute some code, or improve documentation, please read up on the following contribution guidelines:\n\n- [Issue guidelines](CONTRIBUTING.md#submit)\n- [Contributing guidelines](CONTRIBUTING.md)\n- [Coding rules](CONTRIBUTING.md#rules)\n- [Change log](CHANGELOG.md)\n\n#### Thanks to\n\n- [JetBrains], for their support to this open source project with free [WebStorm] licenses.\n\n## \u003ca name=\"license\"\u003e\u003c/a\u003e License\n\nThe MIT License (MIT)\n\nCopyright (c) 2018 [Burak Tasci]\n\n[angular]: https://angular.io\n[nx]: https://nx.dev\n[ngrx-powered]: http://ngrx.github.io\n[angular universal]: https://angular.io/guide/universal\n[angular cli]: https://cli.angular.io\n[@angular-builders]: https://github.com/meltedspark/angular-builders\n[angular material]: https://material.angular.io\n[flex-layout]: https://github.com/angular/flex-layout\n[aot compilation]: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html\n[angular devkit]: https://github.com/angular/angular-cli\n[scss]: http://sass-lang.com\n[autoprefixer]: https://github.com/postcss/autoprefixer\n[browserslist]: https://github.com/browserslist/browserslist\n[stylelint-config-standard]: https://github.com/stylelint/stylelint-config-standard\n[stylelint]: https://stylelint.io/\n[lazy loading]: https://angular-2-training-book.rangle.io/handout/modules/lazy-loading-module.html\n[transferstate]: https://angular.io/api/platform-browser/TransferState\n[ngrx/store]: https://ngrx.io/guide/store\n[ngrx/entity]: https://ngrx.io/guide/entity\n[ngrx/effects]: https://ngrx.io/guide/effects\n[unionize]: https://github.com/pelotom/unionize\n[ngx-config]: https://github.com/fulls1z3/ngx-config\n[ngx-auth]: https://github.com/fulls1z3/ngx-auth\n[ngx-cache]: https://github.com/fulls1z3/ngx-cache\n[ngx-translate]: https://github.com/ngx-translate/core\n[ngx-meta]: https://github.com/fulls1z3/ngx-meta\n[ngx-i18n-router]: https://github.com/fulls1z3/ngx-i18n-router\n[ngx-perfect-scrollbar]: https://github.com/zefoy/ngx-perfect-scrollbar\n[angulartics2]: https://github.com/angulartics/angulartics2\n[jest]: https://facebook.github.io/jest\n[circleci]: https://circleci.com\n[angular-tslint-rules]: https://github.com/fulls1z3/angular-tslint-rules\n[tslint]: https://github.com/palantir/tslint\n[codelyzer]: https://github.com/mgechev/codelyzer\n[jetbrains]: https://www.jetbrains.com/community/opensource\n[webstorm]: https://www.jetbrains.com/webstorm\n[burak tasci]: https://github.com/fulls1z3\n","funding_links":[],"categories":["TypeScript","angular"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffulls1z3%2Funiversal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffulls1z3%2Funiversal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffulls1z3%2Funiversal/lists"}