# Repository overview
# Quick overview of the different repositories
On a high level, the application is monolith (database), but have a list of different repositories that has responsibility for different parts of the business:
The following table provides an overview of the repositories and their responsibilities.
Note: SlideHub was called NoMoreHours until early 2021, which explain some of the repository names
| Repository: | Description | Production URL | Database | Link |
|---|---|---|---|---|
| knowmore-front | Marketing page for potential new designers/freelancers/specialists | Knowmoreplatform.com | Only for blog (on marketing server) | https://github.com/NoMoreHours/knowmore-front |
| nomore-front | Marketing page for potential new customers | slidehub.io | Only for resources and blog (xx?) | https://github.com/NoMoreHours/nomore-front |
| knowmore | Main code base used by project managers, administrators, and registered designers | app.knowmoreplatform.com | Main database | https://github.com/NoMoreHours/knowmore |
| nomorePost | Customers signing up or registered customers sending projects | app.slidehub.io | Main database | https://github.com/NoMoreHours/nomorePost |
| knowmoreApi | API end-point used for a selected number of business areas – and as a potential end-point for other service's webhooks | api.knowmoreplatform.com | Main database | https://github.com/NoMoreHours/knowmoreApi |
| nomore-ppt-app | API end-point written in C# that allows us to conduct certain automated interactions with PowerPoint files | quality-checker.knowmoreplatform.com | None | https://github.com/NoMoreHours/nomore-ppt-app |
| powerpoint-addin | The PowerPoint addin repository | ppt.slidehub.io | Main database | https://github.com/NoMoreHours/powerpoint-addin |
# Full application repositories
# knowmore
Laravel 8+ and Vue.js 2
Hosted at: app.knowmoreplatform.com
The main platform for executing projects on the platform
Host the experience for the specialists (freelancers), delivery team, accounting / finance, specialist success and all other employees at NoMore
The repository also contain 3 front-end packages (NPM) that are also used by NoMorePost:
- Inspiration manager (slide library management)
- Toolkit manager (to manage toolkit related settings)
- Guideline manager (manage the guideline settings) Laravel + Vue (SPA)
First repository developed in the company - started in 2015
# nomorePost
Laravel 8+ and Vue.js 2
Hosted at app.slidehub.io (used to be app.nomorehours.com)
Client facing web platform that allows clients to send tasks, book capacity, manage slide library, invite users, pay bills etc.
Also contain the client onboarding flow
# powerpointAddin
Laravel 8+ and Vue.js 2 (TypeScript)
Hosted at: ppt.slidehub.io (used to be ppt.nomorehours.com)
Hosts the PowerPoint addin and is mainly accessible via PowerPoint (online or desktop version)
Contains very limited back-end code, but mainly front-end code (TypeScript + Vue) aimed at proving clients the best possible experience
# nomore-ppt-app
Csharp - .NET Core 3.1+
Hosted at: csharp-app-only.slidehub.io and quality-checker.knowmoreplatform.com
Our only microservice.
The microservice is built to enable support workload that cannot be conducted by PHP.
The service uses Aspose.Slides .NET and OPENXML to conduct various changes to PowerPoint files.
The microservice does not use any form of database and only use temporary file storage.
# Php packages
# Why we use packages
- The main reason is to keep the code DRY
- However the ”package” based repository approach also make it simpler to work on a given repository as the number of files and responsibilities of each repository is more narrow defined
- Using laravel packages allows for having full test coverage within the package – limiting the need for testing and increase stability of each package
- Unlike a traditional ”micro service approach” (in which service area is hosted on separate instances and with separate databases) the package approach is much simpler to maintain and version. A microservice approach would require more people to maintain due to the extra complexity.
# How these packages are implemented
- Each package is a Laravel PHP package – similar to normal Laravel packages found via Composer
- The packages are hosted via ”Private Packagist” and require a valid NoMoreHours github token to download
- New package releases are released via Github and can be required like any other composer dependency
- Each package contains some of the following: Models, Routes, Controllers, UseCases, Middleware, Assets (images), configs
- All of the packages must contain a test of tests that ensures close to 100% test coverage for all public methods in the different assets
# List of packages
# nomore-base
- Mainly contain models (and relations and other model methods)
- No routes, and very view use cases
- Database.sql file that is used as the database schema for other packages
- Add models to this if the models will be used by more than one other package or “consuming” repository
# nomore-client-services
- Does not contain models
- Contain routes, controllers and use cases that supports clients (requesters) to in relation to everything “task” and “booking” and “inspiration request” related
- Depends on nomore-base, nomore-guidelines, api-bundle
# api-bundle
- Repository that contains a list of different API wrapper
- Depends on nomore-base
- Is used by various packages and consuming repositories
# nomore-guidelines
- Contain models related to client guidelines (files, notes, checklists)
- Contain routes, controllers and usecases
- Scope is limited to everything guidelines related
- Depends on nomore-base
# nomore-design-tools
- Mainly contain models associated with “design-tools” that are used internally by specialists to make slides better or as those being sold to clients as part of the addin / library offering
- Contains routes, controllers, use, cases
- Scope is relative wide and will extend as more design tools are added over time
- Depends on nomore-base
# Using the packages
# Where to put new code?
If used by more than one package (or if it has the potential to be used by one more package) then: nomore-base
If related to dedicated scope package and not consumed by other packages – then the dedicated scope package e.g. guidelines
If only (at least with the current consumer repository setup) it be consumed by one consumer package – then it can exists in that consumer package
This is very unlikely and only relevant for functionality related to specialist application flow and specialist onboarding – and certain parts of project execution
# A use case and associated end-point
If related to a dedicated scope then it should exists sit within that package
If the use case will only be executed by specialists then it should be in knowmore
If only consumed by clients and never via the addin then in nomorePost
If relevant only for clients (requesters) but used on both nomorePost and powerpoint-addin but not a dedicated scope then use the nomore-client-service package