{"id":19335025,"url":"https://github.com/wizdmio/wizdm","last_synced_at":"2025-04-07T08:15:44.390Z","repository":{"id":35408904,"uuid":"180810606","full_name":"wizdmio/wizdm","owner":"wizdmio","description":"The ultimate SPA boilerplate","archived":false,"fork":false,"pushed_at":"2022-04-11T22:00:55.000Z","size":8797,"stargazers_count":133,"open_issues_count":5,"forks_count":62,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-03-31T07:08:54.688Z","etag":null,"topics":["angular","firebase","spa"],"latest_commit_sha":null,"homepage":"https://wizdm.io","language":"TypeScript","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/wizdmio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-04-11T14:32:58.000Z","updated_at":"2025-01-22T10:13:23.000Z","dependencies_parsed_at":"2022-07-27T20:18:53.090Z","dependency_job_id":null,"html_url":"https://github.com/wizdmio/wizdm","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wizdmio%2Fwizdm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wizdmio%2Fwizdm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wizdmio%2Fwizdm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wizdmio%2Fwizdm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wizdmio","download_url":"https://codeload.github.com/wizdmio/wizdm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247615377,"owners_count":20967184,"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","firebase","spa"],"created_at":"2024-11-10T03:04:31.858Z","updated_at":"2025-04-07T08:15:44.356Z","avatar_url":"https://github.com/wizdmio.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"wizdm/src/assets/img/wmlogo.png\" align=\"left\" width=\"76\" /\u003e\n\nWizdm\n=====\n\n[![status](https://img.shields.io/badge/status-stealth-000.svg)](https://wizdm.io)\n[![stability](https://img.shields.io/badge/stability-experimental-yellow.svg)](https://wizdm.io)\n[![contribution](https://img.shields.io/badge/contributions-welcome-important.svg)](mailto:hello@wizdm.io)\n[![issues](https://img.shields.io/github/issues/wizdmio/wizdm.svg)](https://github.com/wizdmio/wizdm/issues)\n[![ngversion](https://img.shields.io/github/package-json/dependency-version/wizdmio/wizdm/@angular/core.svg?label=angular)](.)\n[![license](https://img.shields.io/github/license/wizdmio/wizdm.svg?color=blue)](LICENSE.md)\n\n**Live demo:** https://wizdm.io \n\nWizdm is a boilerplate to kickstart serverless single page applications based on Angular and Firebase. \nDesigned to help aspiring startuppers bootstrapping their side projects into functioning prototypes ready to launch.\n\n## Developers' notes\n\nThe project revolves around a [web-app](apps/wizdm) running on [Angular][angular] + [Angular Material][angular-material] + [FlexLayout][flexlayout] with a minimal clean interface to fit both desktop and mobile. Icon set comes from both [Material][material] and [FontAwesome][fontawesome]. Including [Hammerjs][hammerjs] to handle gestures for material components. Using [Moment][momentjs] for time and locale management.\n\n## Firebase\n\nThe app relies on several [firebase services][firebase]:\n\n* Firebase Hosting to host the production demo app at https://wizdm.io\n* Firebase Auth for user authentication \n* Cloud Firestore realtime database for user's profile and content\n* Cloud Storage for user's images and files\n* Cloud Functions to run key tasks server-side\n\nTake a look on [@wizdm/connect](https://github.com/wizdmio/wizdm/tree/master/connect/src/lib) library abstracting the communication layer with all the firebase services. \n\n## Internationalization\n\nThe project uses a content resolver to dynamically load contents in different languages by pre-fetching localilzed content from 'assets/i18n'.\n\nAt first start, the resolver checks the authenticated user language preferences falling back detecting the browser language when unavailable (aka the user is not logged in). This provides the useful side effect of preventing the initial page from flickering between unlogged and logged-in statuses while an already logged-in user is loading the app from scratch.\n\nThe router is used to switch among languages, so, from the user perspective, it looks like having multiple apps in different languages (e.g. https://wizdm.io/en/home for English or https://wizdm.io/it/home for Italian).\n\nThe localized content is provided by means of the *wmContent* directive granting smooth transitions while switching languages without the need of reloading the full page nor the app.\n\nTake a look on [@wizdm/content](libs/content) package for further information.\n\n## Development server\n\nRun `ng serve` for a dev server. Navigate to `https://localhost:4200/`. The app will automatically reload if you change any of the source files. Be aware that --ssl option is enabled by default using local ssl/server.crt and ssl/servr.key files.\n\n## Code scaffolding\n\nThe workspace is arranged as a monorepo. This means both the source code of the web application(s) and the potentially shared libraries are stored in the same single repository.\n\n```\n/\n├──/animate  - Animate On Scroll\n├──/connect  - Firebase package\n├──/content  - Content resolving (multi-language)\n├──/elements - UI components\n├──/emoji    - Emoji support\n├──/markdown - Markdown renedrer\n├──/wizdm    - The main app\n:\n├── angular.json        ⎫\n├── firebase.json       ⎪\n├── package.json        ⎬ Config files\n├── tsconfig.json       ⎪\n├── tsconfig.base.json  ⎪\n└── tslint.json         ⎭\n ```\n\nRun `ng generate component component-name` to generate a new component to be added to the wizdm default project or specify `--project=project-name` otherwise. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.\n\nTo generate a new library, run `ng generate lib library-name` that will be automatically added to the workspace as a publishable package.\n\nRun `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.\n\nRun `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).\n\nRun `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).\n\nRun `firebase deploy` to upload the last build.\n\n## Repository\n\nSource code is now mantained on [GitHub](https://github.com/wizdmio/wizdm).\n\n## Resources\n\n[wizdm]: https://wizdm.io\n[angular]: https://angular.io\n[material]: https://material.io\n[angular-material]: https://material.angular.io\n[flexlayout]: https://github.com/angular/flex-layout/wiki\n[firebase]: https://firebase.google.com\n[fontawesome]: https://fontawesome.com\n[hammerjs]: https://hammerjs.github.io\n[momentjs]: https://momentjs.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwizdmio%2Fwizdm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwizdmio%2Fwizdm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwizdmio%2Fwizdm/lists"}