{"id":19789090,"url":"https://github.com/ponsfrilus/kata-manga","last_synced_at":"2025-05-01T00:31:51.937Z","repository":{"id":38793516,"uuid":"321750589","full_name":"ponsfrilus/kata-manga","owner":"ponsfrilus","description":"Kata / TPI blanc destiné aux apprentis informaticiens CFC en voie développement d'applications.","archived":false,"fork":false,"pushed_at":"2022-07-07T12:13:35.000Z","size":4557,"stargazers_count":4,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-06T06:34:33.655Z","etag":null,"topics":["dojo","dojo-kata","epfl-dojo-kata","informaticiens-cfc","kata","tpi","tpi-blanc","tpivd"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ponsfrilus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-15T18:11:27.000Z","updated_at":"2022-03-29T13:58:51.000Z","dependencies_parsed_at":"2022-09-18T07:01:31.290Z","dependency_job_id":null,"html_url":"https://github.com/ponsfrilus/kata-manga","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ponsfrilus%2Fkata-manga","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ponsfrilus%2Fkata-manga/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ponsfrilus%2Fkata-manga/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ponsfrilus%2Fkata-manga/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ponsfrilus","download_url":"https://codeload.github.com/ponsfrilus/kata-manga/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251802774,"owners_count":21646278,"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":["dojo","dojo-kata","epfl-dojo-kata","informaticiens-cfc","kata","tpi","tpi-blanc","tpivd"],"created_at":"2024-11-12T06:29:49.214Z","updated_at":"2025-05-01T00:31:51.528Z","avatar_url":"https://github.com/ponsfrilus.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kata Manga\n\n\u003c!-- TOC titleSize:2 tabSpaces:2 depthFrom:1 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 skip:1 title:1 charForUnorderedList:- --\u003e\n## Table of Contents\n- [À propos](#à-propos)\n  - [Vue d’ensemble](#vue-densemble)\n- [Informations générales](#informations-générales)\n- [Matériel et logiciel à disposition](#matériel-et-logiciel-à-disposition)\n- [Prérequis](#prérequis)\n- [Descriptif du projet](#descriptif-du-projet)\n  - [API](#api)\n  - [Front-end](#front-end)\n    - [Home](#home)\n    - [Mangas](#mangas)\n    - [Manga details](#manga-details)\n    - [API](#api)\n  - [Base de données](#base-de-données)\n  - [Tests](#tests)\n- [Conseils](#conseils)\n  - [Conseils sur le déroulé du développement](#conseils-sur-le-déroulé-du-développement)\n  - [Conseils sur le déroulé de la documentation](#conseils-sur-le-déroulé-de-la-documentation)\n- [Livrables](#livrables)\n  - [Planification](#planification)\n  - [Dossier de projet](#dossier-de-projet)\n    - [Rapport](#rapport)\n    - [Annexes](#annexes)\n  - [Journal de travail](#journal-de-travail)\n  - [Application et code](#application-et-code)\n- [Points techniques évalués spécifiques au projet](#points-techniques-évalués-spécifiques-au-projet)\n- [Acceptation du cahier des charges](#acceptation-du-cahier-des-charges)\n\u003c!-- /TOC --\u003e\n\n\n## À propos\n\nLe Kata Manga est un exercice de programmation destiné aux apprenti·e·s\n[informaticien·ne·s CFC en voie développement d’applications]. Il est fait\npour se dérouler sous forme de [Travail pratique individuel (TPI)],\ndont le cadre est fixé par l’article 20 de l’[Ordonnance du SEFRI sur\nla formation professionnelle initiale] et l’évaluation faite selon les\n[critères d’évaluation ICT], détaillés dans le [document fourni par\niCQ-VD](http://www.tpivd.ch/files/cfc-ordo2k14/2.%20Criteres%20d%20evaluation%20TPI.PDF).\n\nLes sources de ce document se trouvent sur\n\u003chttps://github.com/ponsfrilus/kata-manga\u003e.\n\nContributions, remarques et commentaires bienvenues via\n\u003chttps://github.com/ponsfrilus/kata-manga/issues\u003e.\n\n\n### Vue d’ensemble\n\nLe but de ce travail est de fournir une application Web et une [API] présentant\nles 100 [mangas] les plus populaires.\n\nLes données sont fournies sous forme de fichier SQL \n([KataManga_structure_and_data.sql]), que l’apprenti·e devra exploiter. En cas\nde nécessité, ces données peuvent être regénérées à partir des scripts présents \ndans le dossier [import](https://github.com/ponsfrilus/kata-manga/tree/master/import) \nde ce répertoire, ils extraient les informations des 100 mangas les plus \npopulaires du site [My Anime List](https://myanimelist.net/topmanga.php).\n\n\n## Informations générales\n\nLe Kata Manga est prévu pour être réalisé en **80 heures**. Néanmoins, si la \npersonne le réalisant est à l’aise avec Docker, les API et le développement \nfont-end, il est possible de réduire la durée pour réaliser un \"mini TPI\".\n\nLa répartition du temps suggérée est la suivante :\n\n  - Analyse : **10%**\n  - Implémentation : **50%**\n  - Tests : **10%**\n  - Documentation : **30%**\n\n\n## Matériel et logiciel à disposition\n\nLa réalisation de ce travail nécessite uniquement un laptop et un accès à\nInternet. L’utilisation de logiciels libres est fortement recommandée.\n\nSont nommément décrits dans le présent cahier des charges, et sont donc réputés\nobligatoires, les élements suivants :\n\n  - [Docker] et [docker-compose]\n  - [Swagger]\n  - [RDBMS] tel que [MySQL] ou [MariaDB]\n  - [Git]\n\n\n## Prérequis\n\nPour mener à bien ce travail, l’apprenti·e doit :\n\n  - connaître les bases de l’administration système ([shell], [SSH], [CLI]), \n  - être à l’aise avec au moins un langage de programmation permettant de\n    réaliser un site Web, \n  - savoir manipuler des conteneurs [Docker] et les orchestrer avec \n    [docker-compose], \n  - maîtriser un [système de gestion de base de données (SGBD)] basé sur [SQL],\n  - connaître les bases du langage de balisage [MarkDown] pour réaliser les\n    documentations presecrites, \n  - être confortable avec l’utilisation de [Git].\n\n\n## Descriptif du projet\n\nLe but de ce projet est de développer, dans des conteneurs Docker,\nl’application Kata Manga. Elle se compose de trois briques fonctionnelles :\n\n  - l’API (aka back-end) ;\n  - le site Web (aka front-end) ;\n  - la base de données.\n\n_Note : en fonction des choix technologiques qui sont effectués, il peut être \nenvisageable que l’API et le front-end se trouvent dans le même conteneur._\n\n\n### API\n\nLa partie API fournit, sous forme d’API REST, les accesseurs nécessaires pour\ncréer, lire, mettre à jour et supprimer ([CRUD]) les entités présentes dans\nchaque table de la base de données.\n\nLa sécurité des données de l’API (vis-à-vis des lectures et écritures non\nautorisées, ou bien des attaques XSRF) est en-dehors du périmètre de ce travail.\n\n\n### Front-end\n\nLe site Web présente quatre pages aux utilisateurs. L’en-tête fournit un menu de\nnavigation vers ces dernières. Le pied de page mentionne le numéro de version de\nl’application ainsi qu’un lien vers ses sources.\n\n\n#### Home\n\nCette page doit accueillir les visiteurs et présenter le projet, décrite dans la Figure 1.\n\n![\"Maquette de page d’accueil\"](./doc/pencil/home.png)\n\n\n#### Mangas\n\nPage principale du site présentant une liste des mangas, décrite dans la Figure\n2.\n\n  - Une table les présente avec leurs `rank`, `title`, `author`, `genre`, \n    `magazine`, `release date`, `status` ;\n  - La ligne contient un lien vers \n    [https://myanimelist.net/manga/{id}](https://myanimelist.net/manga/2) ;\n  - Chaque colonne est triable ;\n  - Une recherche est possible soit simultanément sur tous les champs de la \n    table, soit séparément sur les champs `title`, `author`, `genre` \n    ou `magazine` ;\n  - Le nombre de résultats présentés dans la table peut être modifié (par \n    exemple `10`, `25`, `50` ou `100` résultats affichés) ;\n  - Une pagination est présente, permettant aux visiteurs d’afficher les \n    résultats suivant ou précédant ceux actuellement affichés.\n\n![\"Maquette de page mangas\"](./doc/pencil/mangas.png)\n\n\n#### Manga details\n\nPage de détails d’un manga, décrite dans la Figure 3.\n\nCette page présente toutes les informations disponibles en base pour un manga.\n\nL’information des `author`, `genre` ou `magazine` présente un lien vers la page\nMangas avec le filtre de recherche pré-rempli.\n\n![\"Maquette de page de détails manga\"](./doc/pencil/manga_details.png)\n\n\n#### API\n\nCette page consiste en la mini-application de découverte de l’API fournie par\nSwagger, décrite dans la Figure 4.\n\nLe·la candidat·e veille à ce que\n\n  - cette page soit active aussi vite que possible dans le déroulé du projet\n  - tous les modèles de la base de données sous-jacente (mangas, genres,\n    magazines et auteurs) soient visibles aussi vite que possible dans le\n    déroulé du projet (même si initialement toutes les informations ne sont pas\n    fournies, ou bien ne sont pas modifiables via l’API)\n\n![\"Maquette de page API\"](./doc/pencil/api.png)\n\n\n### Base de données\n\nLes données pour débuter l'application Kata-Manga sont disponibles dans le\nrépertoire [import](./import) de ce dépôt : le dossier data contient un dumb SQL\n([KataManga_structure_and_data.sql]) à exploiter.\n\nIl est attendu de la part du·de la candidat·e d'utiliser ce fichier afin de\nl'importer automatiquement dans son [système de gestion de base de données\n(SGBD)].\n\nLe fichier [import/README.md](./import/README.md) explique de quelle manière les\ndonnées ont été récupérée et permet de regénérer les données en cas de besoin\n(opération qui ne devrait pas être nécessaire lors de la réalisation).\n\n\n### Tests\n\nLes scénarios de tests mis en place par le·la candidat·e doivent être\ncommuniqués aux intéressé·e·s et documentés dans le rapport. Concernant l’API,\nces derniers doivent pouvoir être (re)joués facilement, selon la méthode\net les explications fournies par l’apprenti·e. Une façon d’automatiser\nces tests (ex : scripts en shell appelant `curl`, ou bien l’outil\n[postman](https://www.postman.com/use-cases/api-testing-automation/)) est\nvivement recommandée.\n\n\n## Conseils\n\n### Conseils sur le déroulé du développement\n\nLe·la candidat·e atteindra, de préférence dans l’ordre, les étapes suivantes :\n\n  - Fondation «ops» : le docker-compose est rédigé ; il lance automatiquement la\n    base de données et un serveur applicatif pour le langage de programmation\n    choisi.\n\n  - Dépendances : les fichiers d’initialisation du système de paquetages choisi\n    pour le langage de programmation (ex : Composer, npm ou Yarn) sont en place,\n    et une dépendance en logiciel libre a été rajoutée au projet et mise en\n    œuvre sur la page d’accueil, qui fonctionne (exemples : Express, Monolog).\n\n  - Reproductibilité : les commandes nécessaires pour cloner et exécuter le\n    projet sur une autre machine que celle du développeur ont été documentées et\n    testées.\n\n  - Fondation «swagger» : Swagger est installé grâce au système de dépendances\n    pré-cité, et une page Web initiale de Swagger est visible.\n\n  - *stubs* Swagger : les différentes entités du modèle relationnel (relations\n    exclues) ont été identifiées, et chacune d’elles est visible sous la forme\n    d’un modèle sur la page Swagger.\n\n  - Testabilité API : le·la candidat·e a établi une stratégie pour tester l’API,\n    et en a rendu compte dans les différentes documentations à produire pour au\n    moins un verbe HTTP sur au moins une des entités.\n\n  - Lecture complète Swagger : il est possible d’énumérer toutes les entités et\n    leurs relations à partir de requêtes GET. Les tests correspondants sont \n    rédigés et validés.\n\n  - Lecture/écriture Swagger : il est possible de créer, modifier et supprimer\n    toutes les entités et leurs relations à l’aide de requêtes REST utilisant un\n    verbe adapté. Les tests correspondants sont rédigés et validés.\n\n  - Mock-up de front-end : les attentes documentées dans le présent document en\n    matière de pages visibles par l’utilisateur du front-end, sont satisfaites\n    avec des données «bidon» (qui ne sont pas consultées en base)\n\n  - Testabilité front-end : un cahier de tests est commencé pour valider le\n    bon fonctionnement du front-end. Il décrit les actions entreprises par le·la\n    candidat·e pour effectuer les tests lui·elle-même.\n\n  - Front-end fonctionnel (en lecture seule) : on peut rechercher et consulter,\n    comme documenté dans le présent document, toutes les entités et toutes les\n    relations des données sous-jacentes via l’interface Web (donc sans passer\n    par Swagger). Le cahier de tests est mis à jour.\n\n  - Peaufinage : les autres exigences techniques mentionnées dans ce cahier des\n    charges sont atteintes. Le cahier de tests est mis à jour.\n\n\n### Conseils sur le déroulé de la documentation\n\n**Le rapport, le journal de travail et le dépôt Git doivent être mis à jour en\ncontinu** pour rendre compte des accomplissements à chaque étape ci-dessus.\n\nAucune «hypothèque» de temps de travail péjorant la documentation ni le code,\nne seront tolérées.\n\n| ⚠️ Il est impératif de souligner l'importance de la documentation dans cet exercice, c'est principalament sur cette dernière que les candidat·e·s sont évalués ⚠️ |\n| :---: |\n\n\n## Livrables\n\n### Planification\n\nEn fin de première journée de travail, le·la candidat·e envoie (au format [PDF])\naux intéressé·e·s une planification initiale détaillant les tâches à accomplir\ndurant le projet. Le niveau de granularité du découpage devrait être de 2 à 4\nheures, mais peut descendre plus bas si la durée du TPI est écourtée.\n\nTout au long du projet, le·la candidat·e mettra à jour la planification rééle.\n\nEn fin de projet, le·la candidat·e veillera a ajouter les planifications\ninitiale et rééle dans son rapport, et prendra le soin d’en commenter les\ndifférences.\n\n\n### Dossier de projet\n\n#### Rapport\n\nUn [canevas de dossier de\nprojet](http://www.tpivd.ch/files/cfc-ordo2k14/Annexe%203%20Canevas%20Dossier%20de%20projet.docx)\nest à disposition du·de la candidat·e.\n\nLe rapport prête une attention particulière à\ndétailler les [points techniques évalués spécifiques au\nprojet](#points-techniques-évalués-spécifiques-au-projet), prouvant que\nl’élément a été traité de manière professionnelle par le·la candidat·e.\n\nLes termes techniques et les acronymes utilisés dans le rapport sont référencés\ndans un glossaire figurant dans le rapport.\n\nLes choix technologiques sont justifiés dans le rapport. Les outils et les\ntechnologies utilisées sont l’objet de descriptions explicatives dans le \nrapport.\n\nLe candidat démontre sa compréhension du système en fournissant un schéma\nd’architecture dont la description detail l’intéraction entre les systèmes.\n\nLe document doit évoluer chaque jour. Il sera envoyé dans l’état aux\nintéressé·e·s deux fois par semaine, au format [PDF]. Dans le cas d'un mini-TPI,\nle rapport est envoyé chaque jour.\n\n\n#### Annexes\n\nLe rapport contient tous les documents nécessaires à la compréhension du\ndéroulement du projet en annexes. Cahier des charges, planifications, journal\nde travail, résumé du rapport TPI, etc. doivent être annexés au document.\n\n\n### Journal de travail\n\nLe journal de travail doit permettre de retracer les activités du·de la\ncandidat·e tout au long du déroulement du projet. Durée des tâches, PV\ndes discussions, problèmes rencontrés, choix, solutions, liens vers la\ndocumentation, les références, sources d’informations, aide extérieure, heures\nsupplémentaires, etc. doivent être consignés dans ce document (c.f. [critères\nd’évaluation] **B2**).\n\nLe journal de travail est présent dans le dossier de projet, en annexe au\nrapport.\n\nLe document doit évoluer chaque jour. Il sera envoyé dans l’état aux\nintéressé·e·s deux fois par semaine, au format [PDF]. Dans le cas d'un mini-TPI,\nle journal de travail est envoyé chaque jour.\n\n\n### Application et code\n\nLe·la candidat·e communique l’adresse de son dépôt Git aux intéressé·e·s et le\nmaintient à jour quotidiennement (plusieurs *commits* par jour). Le dépôt est\nagrémenté d’un fichier `README.md` au format [MarkDown], qui explique\nl’utilisation du projet et sa mise en œuvre. (Voir aussi l’objectif «simplicité\ndes instructions de mise en œuvre», ci-dessous). Le lien vers le dépôt est \nprésent dans la documentation.\n\n\n## Points techniques évalués spécifiques au projet\n\nLa grille d’évaluation définit les critères généraux selon lesquels le travail\ndu candidat·e sera évalué (documentation, journal de travail, respect des \nnormes, qualité, …).\n\nEn plus de cela, le travail sera évalué sur les 7 points spécifiques suivants\n(correspondant aux [critères d’évaluation] **A14** à **A20**) :\n\n  1. La qualité du repository [Git] : messages de commits explicites et\n     lisibles, permettant de retracer l’évolution du code (plusieurs commits par\n     jour, création de branches de fonctionnalités), fichier `README.md` \n     présentant le projet et son déploiement.\n\n  1. Un code exempt de sections copiées/modifiées (principe [DRY: Don't Repeat\n     Yourself]) et respectant le [style de programmation] des langages utilisés.\n\n  1. La simplicité des instructions de mise en œuvre, qui permettent aux\n     intéressé·e·s d’essayer le projet sur leur propre équipement au fur et à \n     mesure de sa progression.  \n     Idéalement, les instructions se limitent à deux étapes \n     (`git clone` et `docker-compose up`).\n\n  1. Les différentes [méthodes HTTP] sont implémentées à bon escient en\n     fonction de l’action réalisée sur la ressource indiquée. Les [codes de \n     réponse HTTP] utilisés permettent aux clients d’avoir une information sur \n     le resultat de leurs requêtes.\n\n  1. Le front-end est soigné, la liste des mangas paginée, triable et la\n     possibilité de faire une recherche dans la table est présente. Les \n     différents points décrit dans le §[Mangas](#mangas) sont implémentés.\n\n  1. Le rapport démontre que le·la candidat·e a étudié le modèle des données : \n     un diagramme entité-association ([ERD]) est présent dans le rapport. Le·la\n     candidat·e décrit et critique le diagramme et les différentes tables.\n\n  1. L’utilisateur·trice a accès à une page de documentation de l’API,\n     qui explique les types de données, les valeurs de retour, les\n     différentes possibilités d’interactions avec l’API. Le respect de\n     [OAS](http://spec.openapis.org/oas/v3.0.3) et l’utilisation des fonctions \n     de documentation de [Swagger] sont nécessaires pour obtenir le score \n     maximal sur ce point.\n\n\n## Acceptation du cahier des charges\n\n\u003c!-- way too much effort to get a spacing in pandoc https://tex.stackexchange.com/a/4523/92317 --\u003e\n|     |                   | Lu et approuvé le | Signature         |     |\n| --- | ----------------: | ----------------- | ----------------- | --- |\n|     | \\vphantom         |                   |                   |     |\n|     | Candidat·e        | _________________ | _________________ |     |\n|     | \\vphantom         |                   |                   |     |\n|     | Expert·e n°1      | _________________ | _________________ |     |\n|     | \\vphantom         |                   |                   |     |\n|     | Expert·e n°2      | _________________ | _________________ |     |\n|     | \\vphantom         |                   |                   |     |\n|     | Chef·fe de projet | _________________ | _________________ |     |\n|     | \\vphantom         |                   |                   |     |\n\n\n\n[REFERENCES]: ------------------------------------------------------------------\n[API]: https://fr.wikipedia.org/wiki/Interface_de_programmation\n[CLI]: https://fr.wikipedia.org/wiki/Interface_en_ligne_de_commande\n[codes de réponse HTTP]: https://developer.mozilla.org/fr/docs/Web/HTTP/Status\n[critères d’évaluation ICT]: https://www.ict-berufsbildung.ch/fileadmin/user_upload/02_Francais/01_formation_initiale/PDF/Beurteilungskriterien_IPA_V1.1_FR.pdf\n[critères d’évaluation]: http://www.tpivd.ch/files/cfc-ordo2k14/2.%20Criteres%20d%20evaluation%20TPI.PDF\n[CRUD]: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete\n[docker-compose]: https://docs.docker.com/compose/\n[Docker]: https://www.docker.com/\n[DRY: Don't Repeat Yourself]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself\n[ERD]: https://fr.wikipedia.org/wiki/Mod%C3%A8le_entit%C3%A9-association\n[Git]: https://git-scm.com/\n[informaticien·ne·s CFC en voie développement d’applications]: https://www.ict-berufsbildung.ch/fr/formation-professionnelle/informaticien-ne-cfc-developpement-dapplications/\n[KataManga_structure_and_data.sql]: https://github.com/ponsfrilus/kata-manga/tree/master/import/data/KataManga_structure_and_data.sql\n[mangas]: https://fr.wikipedia.org/wiki/Manga\n[MarkDown]: https://daringfireball.net/projects/markdown/\n[méthodes HTTP]: https://developer.mozilla.org/fr/docs/Web/HTTP/M%C3%A9thode\n[MySQL]: https://www.mysql.com/\n[RDBMS]: https://en.wikipedia.org/wiki/RDBMS\n[MariaDB]: https://mariadb.org/\n[Open Web Application Security Project® (OWASP)]: https://owasp.org/\n[Ordonnance du SEFRI sur la formation professionnelle initiale]: https://www.ict-berufsbildung.ch/fileadmin/user_upload/02_Francais/01_formation_initiale/PDF/Bildungsverordnung_Informatiker_in_EFZ-100f-20131017TRR.pdf\n[PDF]: https://en.wikipedia.org/wiki/PDF\n[shell]: https://fr.wikipedia.org/wiki/Shell_Unix\n[SQL]: https://fr.wikipedia.org/wiki/Structured_Query_Language\n[ssh]: https://fr.wikipedia.org/wiki/Secure_Shell\n[style de programmation]: https://fr.wikipedia.org/wiki/Style_de_programmation\n[Swagger]: https://swagger.io/\n[système de gestion de base de données (SGBD)]: https://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_base_de_donn%C3%A9es\n[Travail pratique individuel (TPI)]: https://www.iffp.swiss/tpi-travail-pratique-individuel\n\n[use me to generate the PDF]: # (pandoc README.md \\\n    --pdf-engine=xelatex \\\n    -V mainfont=\"DejaVu Sans\" \\\n    -V urlcolor=cyan \\\n    -V papersize:a4paper \\\n    -V monofont=\"FreeMono\" \\\n    -V geometry:vmargin=2cm \\\n    -V geometry:hmargin=3cm \\\n    -V block-headings \\\n    -o README.pdf; \\\n  xdg-open README.pdf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fponsfrilus%2Fkata-manga","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fponsfrilus%2Fkata-manga","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fponsfrilus%2Fkata-manga/lists"}