GEDCOM Parser and Web server

A parser written in C, and a web server written in NodeJS, jQuery and MySQL.

This was the semester project for Software Systems Development and Integration (CIS*2750, aka "The angel of Death"). It was built over the course of four assignments, the first two being the parser, the second two being the web server.
The GEDCOM file is a format used to store genealogical information. Developed by the Church of Latter Day Saints in the 80s, with the newest revision being in the late 90's. It stores the information in a text file where each line has a level number (which tells you if that line's information belongs to an earlier object), a tag and a value. It stores individuals and their information, like important dates and events, as well as their family connections. It also stores families, with links to individuals within those families. It is a seemingly simple format, but has many nuances and is hard to implement fully in practice.
The GEDCOM format is very complex (the spec is over 100 pages), so the parser doesn't fully implement the full spec, it only can parser a small subset of the possible tags. It can do basic files and family structures, and some of the types of individual events and information. It can also edit the files by adding individuals and then writing it back to a file. This was compiled to a shared library and used through a foreign function interface in Node.JS to be the back end of a web server.
The web server would allow users to upload a GEDCOM file and view basic information about it, make some simple changes and make some queries about it. The front end was done in HTML with Bootstrap 4, with client side scripting done in JavaScript with jQuery. The backend is written in Node.JS, and the database is done with MySQL. Files are uploaded by the user and loaded into the database. The information is then presented on tables to the user. They can make MySQL queries on the database, as well as use some functions in the C library to find things like ancestors and descendants.