base on A genealogy/family tree application, built with Laravel. # Genealogy Application English | [Indonesia](README.id.md) ![Laravel](https://laravel.com/assets/img/components/logo-laravel.svg) [![Build Status](https://travis-ci.org/nafiesl/silsilah.svg?branch=master)](https://travis-ci.org/nafiesl/silsilah) [![Coverage Status](https://coveralls.io/repos/github/nafiesl/silsilah/badge.svg?branch=master)](https://coveralls.io/github/nafiesl/silsilah?branch=master) > **⚠️ Development in progress** > In development progress, any changes of table structure **will be updated** directly to corresponding **migration file**. ## About Genealogy (Silsilah) application to record our family members. ## Features This application uses Bahasa Indonesia and English based on `config.locale`. ### Logic Concept 1. A person can have one father 2. A person can have one mother 3. A person can have one parent (couple of mother and father) 4. A person can have 0 to many children 5. A person can have 0 to many spouses (husbands or wife) 6. A couple can have 0 to many children (based on parent_id) ### Family Member Entry 1. Enter Name and Gender 2. Set Father 3. Set Mother 4. Add Spouse 5. Add Child ### Person Attribute 1. Nickname 2. Gender 3. Fullname 4. Date of birth 5. Date of death (or at least year of death) 6. Address 7. Phone Number 8. Email ### Couple Attribute (TODO) 1. Husband 2. Wife 3. Marriage Date 4. Divorce Date 5. Address ## How to Install ### Server Requirements This application can be installed on local server and online server with these specifications : 1. PHP 7.3 (and meet other [Laravel 8.x server requirements](https://laravel.com/docs/8.x/deployment#server-requirements)), 2. MySQL or MariaDB database, 3. SQlite (for automated testing). ### Manual Installation 1. Clone the repo and move to the application directory. ```bash git clone https://github.com/nafiesl/silsilah.git cd silsilah ``` 2. Install dependencies: ```bash composer install ``` 3. Create `.env` file: ```bash cp .env.example .env ``` 4. Generate application key: ```bash php artisan key:generate ``` 5. Setup database and adjust other environment variables configuration in the `.env` file. 6. Add admin email to the `.env` file (Optional): ```bash [email protected];[email protected] ``` 7. Migrate database and link storage: ```bash php artisan migrate php artisan storage:link ``` 8. Run the application: ```bash php artisan serve --host 0.0.0.0 --port=8000 ``` Open the application in the browser at <http://localhost:8000>. ### Install with Docker Make sure Docker and Docker Compose are installed. ```bash make run-docker ``` or ```bash docker-compose up -d ``` Open the application in the browser at <http://localhost:8000>. ## Testing This application built with testing (TDD) using in-memory sqlite database. ```bash vendor/bin/phpunit ``` ## Contributing Feel free to submit Issue for bugs or sugestions and Pull Request. ## Screenshots ### Family Tree ![Family Tree](public/images/02-pohon-keluarga.jpg "Family Tree") This family tree view is using the [Horizontal Family Tree CSS](https://codepen.io/P233/pen/Kzbsi), thanks to [Peiwen Lu](https://codepen.io/P233/pen/Kzbsi). ### Family Chart ![Family Chart](public/images/03-bagan-keluarga.jpg "Family Chart") ### Search Family Member ![Search Family Member](public/images/01-cari-keluarga.jpg "Search Family Member") ### User Profile ![User Profile](public/images/04-profil.jpg "User Profile") ### Profile Form ![Profile Form](public/images/05-form-profil.jpg "Profile Form") ### Profil Edit Form ![Profil Edit Form](public/images/06-edit-profil.jpg "Profil Edit Form") ### Automated Testing ![Automated Testing](public/images/07-automated-testing.jpg "Automated Testing") ## License Silsilah project is open-sourced software licensed under the [MIT license](LICENSE). ", Assign "at most 3 tags" to the expected json: {"id":"9336","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"