Code details... - PaulTGG/stardewtracker GitHub Wiki
The database has two main tables, the items table, and the recipes table. (Disclaimer: the sql file was exported from Postgres, so it may need some tweaking before you can import it into a different database. Might even need to create a user called "stardewuser" in your DB.)
The items table lists everything (items, quests, fish, bundles, etc.), and includes data about those things. e.g., A Pumpkin is a crop, you need to ship it, and it grows in Fall. A Fried Egg is a cooking item. Both are items we're tracking.
Here are the columns of the items table, viewed in PostgreSQL (because booleans are people, too).

The recipes table lists which items go into which other items. (If it's trackable on the items table, it has a trackable ID on the recipes table.) We let SQL do the math and group all the items together.

Each game you add gets its own table in the database (simpler to program, and faster than having a zillion games in one table). It's populated with the trackable items from the items table (SQL does the heavy lifting).

There's also a table that has the list of games, which the site uses to display the list on the landing page, and populate the drop-down on the deletion page. Games can technically be inactivated on that table (flipping the "active" column to "false" or "0" depending on which database you're using), which will prevent it from showing up on the list of games. When you add a game, an entry is posted to the gamelist table first, which gives that game name a unique primary key value, that is then used to make sure that the name of the table that stores the gamedata is unique. (Clever, eh?) (No?) (Well, I thought it was pretty good for a first-timer.)
The site itself uses a deceptively large number of forms and submit buttons posing as links. The game selection is initially passed to the tracking page using GET values (so that you can bookmark a particular game and go straight to the tracking page), but all the other values are passed by POST.
The site is also well-formed HTML, so anyone with better design skills than me (read: anyone) can just throw a new style sheet at it and make it pretty.
That's about it.