use headless for watching support

This commit is contained in:
2023-02-19 13:12:01 +01:00
parent ff31e4e418
commit a10c903807
13 changed files with 5 additions and 2 deletions

3
content/data/index.md Normal file
View File

@ -0,0 +1,3 @@
---
headless: true
---

View File

@ -0,0 +1,13 @@
[`ASP.NET Core 7`](https://docs.microsoft.com/aspnet/core/) implementation, following `DDD` principle, implemented with `Hexa architecture` and `CQRS` pattern. [Swashbuckle](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) is used as default main OpenAPI generator that's perfectly integrates into the code.
Main packages involved :
* [EF Core](https://docs.microsoft.com/ef/) as strongly typed ORM
* [MediatR](https://github.com/jbogard/MediatR) for easy mediator implementation. It allows strong decoupling between all ASP.NET controllers and the final application which is cutted into small queries and commands
* [Fluent Validation](https://fluentvalidation.net/) for strongly typed validation
* [dotnet-format](https://github.com/dotnet/format) as official formatter
* [xUnit.net](https://xunit.net/) as framework test
* [Fluent Assertions](https://fluentassertions.com/) for strongly typed assertions within the API
* [Respawn](https://github.com/jbogard/Respawn) as for optimal integration tests isolation
* [Bogus](https://github.com/bchavez/Bogus) for strongly typed fake data generator
* [Bullseye](https://github.com/adamralph/bullseye) as a nice CLI publisher tool with dependency graph

View File

@ -0,0 +1,14 @@
[`FastAPI`](https://fastapi.tiangolo.com/) implementation under last `Python 3.11` with [Pipenv](https://pypi.org/project/pipenv/) as package manager.
It's based on [pydantic](https://pydantic-docs.helpmanual.io/), an essential component that allows proper OpenAPI generation and data validations while bringing advanced type hints.
Main packages involved :
* [pydantic](https://pydantic-docs.helpmanual.io/), data validation with Python 3.6+ type hints
* [SQLAlchemy](https://www.sqlalchemy.org/) with [Alembic](https://alembic.sqlalchemy.org/en/latest/) for schema migration
* [python-jose](https://github.com/mpdavis/python-jose) as JWT implementation
* [Faker](https://faker.readthedocs.io/en/master/) as dummy data generator
* [autoflake](https://pypi.org/project/autoflake/) and [isort](https://pycqa.github.io/isort/) for clean imports
* [Flake8](https://flake8.pycqa.org/en/latest/) and [Black](https://black.readthedocs.io/en/stable/) as respective code linter and powerful code formatter
* [mypy](http://mypy-lang.org/) as advanced static analyzer
* [pytest](https://docs.pytest.org) as main test framework

View File

@ -0,0 +1,13 @@
A heavily customized `Laravel 8` boilerplate starter-kit with complete BO solution, with posts management as main demo feature. On frontend/assets side it's relies on last technologies, i.e. `pnpm` + `Vue 3` + `Typescript` with nice [template setup](https://v3.vuejs.org/api/sfc-script-setup.html) as default syntactic sugar, and finally `Windi CSS` as CSS utility framework. You can easily ditch Windi CSS for `Tailwind` if you prefer, as it's almost the same API.
The BO dev API is similar to my last `Vuetify Admin` project but rewritten in more customizable components. You have complete **DataTable** with pagination, sorts, global search, filters, Excel export, customizable row actions with nice Dev-side API. It has a nice **BaseForm** which reduces forms code boilerplate, with a few supported form inputs (you can easily create your own). It's also support direct right-aside editing with proper URL context (see users management on demo). All BO relies on [Inertia](https://inertiajs.com/) for minimal API glue boilerplate.
This project has full covered test suite written in [`Pest`](https://pestphp.com/) and uses the most known Dev tools for proper QA assurance as :
* `Larastan` as static analyszer,
* `PHP CS Fixer` as code formatter
* `Laravel IDE Helper` for proper IDE integration
* `Clockwork` for debugging (notably N+1 SQL problems)
* `PHPUnit Watcher` for full `TDD` experience
* Perfect `VS Code` integration with recommended plugins
* `Docker` support

View File

@ -0,0 +1,15 @@
[`Laravel 10`](https://laravel.com/) implementation on `PHP 8.2` with extensive usage of last attributes support. The particularity of this framework is to give you almost of all you need for quickly develop any complex application. So minimal external packages need.
I obviously made usage of **Eloquent** as a very expressive **Active Record** ORM, and the Laravel factories system based on [PHP Faker](https://fakerphp.github.io/) is already perfect for dummy data generator.
Contrary to most others projects, there is no usage of DTO classes, so it's required to write all schema declarations for proper OpenAPI models generation.
Main packages involved :
* [PHP JWT](https://github.com/lcobucci/jwt) as JWT implementation, with proper integration to Laravel using custom guard
* [Laravel Routes Attribute](https://github.com/spatie/laravel-route-attributes) for Laravel routing that leverage on last PHP 8 attributes feature
* [Laravel OpenAPI](https://github.com/vyuldashev/laravel-openapi) that also use PHP 8 attributes for API documentation
* [Laravel IDE Helper](https://github.com/barryvdh/laravel-ide-helper) for proper IDE integration, perfectly suited for **VS Code** with [Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client) extension
* [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) as formatter with Laravel style guide
* [Larastan](https://github.com/nunomaduro/larastan), a Laravel wrapper of [PHPStan](https://phpstan.org/), as advanced code static analyzer
* [Pest](https://pestphp.com/) as nice Jest-like API superset of existing PHPUnit

View File

@ -0,0 +1,12 @@
[`NestJS 9`](https://nestjs.com/) implementation under `NodeJS` using [`Typescript`](https://www.typescriptlang.org/) and [`pnpm`](https://pnpm.io/) as fast package manager. It relies by default on [`express`](https://github.com/expressjs/express) as NodeJS HTTP server implementation. NestJS offers a nice OpenAPI documentation generator thanks to Typescript which provides strong typing.
The separated ORM package take the best ideas from both known Doctrine and Eloquent PHP ORM :
* **DataMapper** pattern with POTO objects like Doctrine, with similar migrations generator.
* A **Model Factory** with seeder system for quick seeding dummy data inside database, with help of [Faker](https://github.com/faker-js/faker), as Laravel does.
Main packages involved :
* [MikroORM](https://mikro-orm.io/) on **latest v5** as `DataMapper` ORM that relies on Typescript, including migrations and seeders with as dummy data generator
* [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and code formatting
* [Jest](https://jestjs.io) as main test framework

View File

@ -0,0 +1,12 @@
[`React TS`](https://vuejs.org/) implementation. Using same :
* [UnoCSS](https://github.com/unocss/unocss) utility-first CSS framework as `Vue 3` version with Dark Mode support.
* [openapi-typescript](https://github.com/drwpow/openapi-typescript) as OpenAPI SDK.
Main packages involved :
* [Vite](https://vitejs.dev/) as main bundler
* [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and code formatting
* [UnoCSS](https://github.com/unocss/unocss) as utility-first CSS framework
* [Iconify](https://github.com/iconify/iconify) as universal icons
* React Context as minimalist store system

View File

@ -0,0 +1,18 @@
Main purpose of this projects is to have personal extensive API training on multiple backend languages or framework. It's following the very known [Conduit project](https://github.com/gothinkster/realworld), a `Medium` clone. Each project respect following conditions :
* `VS Code` as only main editor !
* 100% compatible by the official [OpenAPI Spec](https://realworld-docs.netlify.app/docs/specs/backend-specs/endpoints)
* Proper OpenAPI documentation
* Testable with [last Postman collection of Conduit](https://github.com/gothinkster/realworld/tree/main/api)
* Fully tested
* High QA by following best practices for linting, formatting, with static analyzers for non strongly typed languages
* Community-driven with usage of the most well-known packages
* `PostgreSQL` as main databases
* Use ORM whenever possible that follows any `DataMapper` or `Active Record` patterns
* Proper seeder / faker for quick starting with filled DB
* Separated RW / RO database connections for maximizing performance between these 2 contexts
* Proper suited QA + production Dockerfile
* Complete CI on Kubernetes with [Concourse](https://concourse.okami101.io/)
* Automatic CD on Kubernetes using [Flux](https://fluxcd.io/)
See complete production deployment manifests [here](https://gitea.okami101.io/adr1enbe4udou1n/flux-source/src/branch/main/conduit), allowing **GitOps** management.

View File

@ -0,0 +1,12 @@
[`Spring Boot 3`](https://spring.io/projects/spring-boot) implementation using `Gradle 7.5` & `Java 19`. Similar to the [official Spring Boot implementation](https://github.com/gothinkster/spring-boot-realworld-example-app) but with usage of `Spring Data JPA` instead of `MyBatis`. [Here is another nice one](https://github.com/raeperd/realworld-springboot-java) that explicitly follows `DDD`.
Main packages involved :
* [springdoc-openapi](https://springdoc.org/) as API documentation generator
* [Java JWT](https://github.com/jwtk/jjwt) as JWT implementation
* [Spring Data JPA](https://spring.io/projects/spring-data-jpa/) with Hibernate as default JPA implementation
* [Flyway](https://flywaydb.org/) as proper migration tool based on SQL language as first party
* [Lombok](https://projectlombok.org/) for less boring POO encapsulation boilerplate
* `JUnit 5` with [REST Assured](https://rest-assured.io/) for fluent API assertions
* [Spotless Formatter](https://github.com/diffplug/spotless) with proper `Vs Code` integration
* [Java Faker](http://dius.github.io/java-faker/) as fake data generator

View File

@ -0,0 +1,15 @@
[`Symfony 6.2`](https://symfony.com/) implementation on `PHP 8.2` that supports PHP 8 attributes. I excluded the usage of [API Platform](https://api-platform.com/) here, which is a very powerful API crud generator but really not well suited for real customized API in my taste.
Contrary to Laravel, the usage of **DataMapper** pattern ORM involve classic POPO models. The additional usage of plain PHP DTO classes facilitates the OpenAPI spec models generation without writing all schemas by hand. On the downside the Nelmio package is far more verbose than the Laravel OpenAPI version.
Main packages involved :
* [Doctrine](https://www.doctrine-project.org/) as **DataMapper** ORM
* [SensioFrameworkExtraBundle](https://github.com/sensiolabs/SensioFrameworkExtraBundle) for ParamConverter helper with Doctrine
* [FOSRestBundle](https://github.com/FriendsOfSymfony/FOSRestBundle) only for some helpers as DTO automatic converters and validation
* [NelmioApiDocBundle](https://github.com/nelmio/NelmioApiDocBundle) as **OpenAPI** generator
* [Symfony JWT Bundle](https://github.com/lexik/LexikJWTAuthenticationBundle) implementation
* [Alice](https://github.com/nelmio/alice) as fixtures generator that relies on [PHP Faker](https://fakerphp.github.io/)
* [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) as formatter
* [PHPStan](https://phpstan.org/), as advanced code static analyzer
* [PHPUnit](https://phpunit.de/) as test framework

View File

@ -0,0 +1,18 @@
[`Vue 3 TS`](https://vuejs.org/) implementation written with Composition API. Instead of using outdated [Bootstrap v4 alpha 2 theme](https://github.com/gothinkster/conduit-bootstrap-template), I rewrite it on [UnoCSS](https://github.com/unocss/unocss), an awesome efficient Tailwind-like utility-first CSS framework, with Dark Mode support.
For API communication, as we have full proper OpenAPI spec, it's a real benefit to have a generated Typescript client for full autocompletion feature. I generally hate generated boilerplate code and the well known [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) is not very nice to use.
Thankfully this [openapi-typescript](https://github.com/drwpow/openapi-typescript) package was the perfect solution. It simply translates the OpenAPI spec to a simple Typescript file, with only types. No code generation involved ! In order to work, we need to use a specific **fetch** tool which will use all advanced features of Typescript 4 in order to guess type all the API with only a single TS file in runtime !
Main packages involved :
* [Vite](https://vitejs.dev/) as main bundler
* [vue-tsc](https://github.com/johnsoncodehk/volar/tree/master/packages/vue-tsc) as main TS checker and compiler for Vue components, with full VS Code support with [Volar](https://github.com/johnsoncodehk/volar) plugin
* [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and code formatting
* [UnoCSS](https://github.com/unocss/unocss) as utility-first CSS framework
* [Iconify](https://github.com/iconify/iconify) as universal icons
* [Pinia](https://pinia.vuejs.org/) as main store system
* [VueUse](https://vueuse.org/) for many composition function helpers
* [unplugin-auto-import](https://github.com/antfu/unplugin-auto-import) and [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components) for vue 3 reactivity functions and components auto import, while preserving TS support
* [vite-plugin-pages](https://github.com/hannoeru/vite-plugin-pages) and [vite-plugin-vue-layouts](https://github.com/JohnCampionJr/vite-plugin-vue-layouts) for file-based route system with layout support, preventing us maintenance of separated route file, which made the DX similar to [Nuxt](https://nuxtjs.org/)
* [openapi-typescript](https://github.com/drwpow/openapi-typescript) as advanced minimal client-side OpenAPI generator which use advanced Typescript features for autodiscovering all API types without any boilerplate code thanks to [separated fetcher](https://github.com/ajaishankar/openapi-typescript-fetch)

View File

@ -0,0 +1,15 @@
My most personal open-source 2020 *Mammoth* project. It's a full admin framework similar as [React Admin](https://marmelab.com/react-admin/) but for `VueJS 2` and using `Vuetify 2` as material frontend framework.
It's a complete frontend project mainly written in `Javascript`, with multiple usable [NPM packages](https://www.npmjs.com/package/vuetify-admin), a backend [Laravel bridge](https://github.com/okami101/laravel-admin), all inside a mono-repo managed by [Lerna](https://lerna.js.org/). A [Vue CLI plugin](https://www.npmjs.com/package/vue-cli-plugin-vuetify-admin) was also created for quick starting.
I put many efforts into writing [a complete documentation](https://www.okami101.io/vuetify-admin) on [VuePress](https://vuepress.vuejs.org/), with [complete tutorials](https://www.okami101.io/vuetify-admin/guide/tutorial.html), including integration within [Laravel](https://www.okami101.io/vuetify-admin/guide/laravel.html) and [Symfony API Platform](https://www.okami101.io/vuetify-admin/guide/api-platform.html). This documentation has clearly represented not far from **80%** of all work ! It also has [many samples](https://github.com/okami101/vuetify-admin/tree/master/examples) and [a complete demo](https://va-demo.okami101.io/).
But I had to decide to stop this project after a couple of months because multiple reasons :
* Less time available
* Too much effort to maintain and evolve it
* Not written on `Typescript` that allows proper refactoring
* No unit tests from the beginning, what has proved to be **HUGE** mistake
* `Vite`, `Vue 3` with real `Typescript` support and `Vuetify 3` are in the corner, which necessitates full rewrite and new *next* repo
Nevertheless, it was a very instructive project that shows me the **real amount work for a good documentation** and the **cost of missing proper unit/integration/e2e tests**.