Coder Social home page Coder Social logo

impworks / bonsai Goto Github PK

View Code? Open in Web Editor NEW
197.0 18.0 24.0 4 MB

Self-hosted family wiki engine / photoalbum

License: MIT License

C# 64.51% JavaScript 13.23% Batchfile 0.03% HTML 17.82% Dockerfile 0.15% SCSS 4.26%
wiki family family-tree photos calendar ancestry pedigree family-wiki-engine photo-album photoalbum

bonsai's Issues

Backups

A way to export and import backups is required. Probably with an option to extract just the data or everything (including media).

What about periodical auto-backups?

Frontend minification

When deploying to a production server, the frontend assets must be optimized:

  • Minify JS scripts
  • Minify CSS styles
  • Set Vue to Production mode

Configurable authorization types

More authorization options are needed to allow people with Odnoklassniki / VK accounts to register and authorize. However, requiring the admin to set up 4 authorization apps just to start Bonsai is way too cumbersome, so each provider type can be individually enabled or disabled. At least one authorization option must be enabled.

  • Add Odnoklassniki and VK authorization options
  • Add a configuration to pick desired provider types

Video uploading

Features required:

  • Extract thumbnail
  • Provide thumbnail stub until the actual thumbnail is extracted
  • Encode to a viewer-friendly format

Will probably use the console ffmpeg utility. Should research:

  • License agreement compatibility
  • Cross-platform support

Genealogy tree display

The front section of the site should display a genealogy tree of the family. However, it's currently unclear how to resolve some really complex relations in 2D, which are hypothetically possible. Investigation is required.

Media search

The search bar should include results from media titles and descriptions as well as pages.

Death flag

Sometimes a distant ancestor's death date is unknown, and they are shown as alive on the family tree.

There should be an extra flag that indicates "the person is dead even if the date is unknown".

Document uploading

PDF scans of birth/death certificates, etc.

Unresolved design decisions:

  • Display: in-browser or download?
  • Thumbnail?

Tree rendering improvements

The tree is often rendered in a messy way.
ELK uses the elk.layered.thoroughness parameter to improve graph quality at the cost of speed.

  • Determine the optimal value
  • Add a placeholder "Rendering, please wait" while the tree is being processed

Empty fact groups are displayed

Reproduction:

  • Add a new fact to any list (for example, Hobbies)
  • Remove the fact
  • Save the page

Expected result: the "hobbies" block is not shown
Actual result: the "hobbies" block is displayed, but there is no data in it

Drafts & preview

When the user is editing a page, the current draft must be periodically backed up to server as unpublished changes to avoid accidental loss of data. If the user closes the editor and opens it back again, latest draft data should be loaded instead of the fresh start.

Draft are saved per-user, per-page. When the page is published, the corresponding draft is deleted.

The draft can also be used to display a page preview before actually publishing it.

Mass actions for photos

Would be very useful to be able to tag all newly uploaded photos with a location, event or date.

Editor links when viewing the page

If the user is authorized with editor or admin privileges, the page's description/media view should contain links to:

  • Page editor
  • Filtered list of media
  • Filtered list of relations

Changeset filters

The changeset list should be filterable by an edited entity (media \ page) or by editor by following a link from the media\page\user list.

In this mode, the top should display the filter caption with a button to close it.

Server-side tree layout calculation

Currently the tree layout is calculated on the client, and a good-looking layout takes about 2 seconds to process. This has to be done for each opened page and cannot be cached.

The better solution is to perform the layout asynchronously on the server. It should be stored in a TreeLayout table as ready-to-render JSON. When any relation is changed, the entire table is cleared. Then the background worker enumerates all the pages and creates a layout for each independent subgraph, linking each page to the subgraph where it is included. The tree display page merely checks for the update regularly is the tree is not yet rendered at the time of display.

A research of available JS runners should be done.

No authorization mode

It would be nice to have a mode without any authorization.

For quick start, for development, for home use, or when someone just doesn't want/couldn't set up external authorization service.

Any option is apreciated, it could be flag/config parameter or anything.

Fact display improvements

  • Show only changed last names if the person has not changed other parts of the name
  • Show age at the time of death if the birthday is known
  • Show age near the birthday if the person is alive

Error pages

The app should contain a special page for 404 and 500.

Name autocomplete in text editor

Currently if you want to reference one page from another, you have to either open the page search modal window, or type the entire link markdown code letter-by-letter.

It would be useful to add an autocomplete dropdown after typing a @ symbol, much like Github does:

image

The SimpleMDE editor is based on CodeMirror editor component, which supports autocomplete.

Взаимодействие с картой

В вики-движке довольно много полей с потенциальной геолокацией, возможно ли интегрировать эти данные с сервисом карт?
Интересно было бы увидеть места жительства родственников на карте. Возможно какую-то аналитику, например процессы миграции.

PS: Пока писал понял, что такую карту можно создать вручную, например с помощью конструктора карт от yandex или аналогичных сервисов и ссылкой привязать к профилю или событию. Но вдруг реализация этой хотелки не дико сложная задача.

Caching service

Cache rendered pages to speed up the display.

  • Cache pages
  • Clear cache on updates

The most complex thing is to determine which pages may be changed during an update. For the first time a complete cache flush may be sufficient.

Guidelines

The page editor should feature a special help section with a guide for writing style: how to split the text into paragraphs, what to mention and what to omit, etc.

When a new user edits any page, this help section must be clearly visible (advertised with a dismissable alert, probably?).

A markdown guide will also be useful.

Search improvement

Search results are not always sorted in order of relevance. A thorough examination of the Elasticsearch config is desired.

Improve UX for continuous photo tagging

When saving an edited photo, there should be an option to automatically open the next one which has no tags instead of just returning to the list. This will save a lot of time when tagging large amounts of photos.

Export/import

It would be nice to have import/export to popular genealogy data formats, such as GEDCOM.

Access control

Editor access should be configurable. However, the actual use cases are not exactly clear.

  • Disallow this user to edit this page
  • Disallow the user to edit any page except for this one
  • Discard all changes by a user and revoke editor access (for extreme cases)

Incorrect facts break preview

Reproduction steps:

  1. Open the new page editor
  2. Add an incorrect birth date
  3. Press "preview"

Expected result: the preview is displayed, incorrectly entered facts are omitted.
Actual result: the preview returns status code 500.

Date picker

A custom date picker that supports fuzzy date:

??.??.195?

Automatic tagging via face recognition

When uploading numerous photos, tagging everyone individually could be bothersome. This process could be streamlined by a background service that automatically detects people on photos.

Things to think over:

  • Which face recognition library to use?
  • It should be possible to ignore a particular face
  • Changeset grouping?

Personal page: attach existing

There can be a case when the user is registered after their personal page is already created by the admin.
The user validation page should feature a picker to select an already existing page.

Page picker

There should be a way to add links to people. For example, using the @-mentions or in a pop-up like the media picker.

Docker image

Would be nice to have a docker image with all dependencies (Elasticsearch, PostgreSQL, ffmpeg) for easy installation.

Revert changeset

The changeset list must allow reverting changesets.

Reverting a changeset means restoring the state before the edit. The current change and all changes made later to this entity are discarded.

The "Created" changesets cannot be reverted.

  • Display confirmation
  • Restore the previous state
  • Clear IsDeleted flag if the entity is currently deleted

Markdown guide

The markdown editor should open a pop-up window with the syntax explaination and examples.

Fact editor usability improvements

  • Infer human name from page title
  • When adding a new name, use existing first and middle names and date
  • Infer gender from the middle name
  • Add russian language by default unless it exists
  • Collapsible durations

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.