I am an avid table-top RPG player. I have been playing various forms of RPGs for years (currently it's mainly D&D, and
Edge of the Empire). Frequently, I felt limited or frustrated by the paper character sheets I had. And sometimes I'd
lose them, or something would get spilled, or I'd want to look up something about my character, but didn't have it on me.
Any of you who've played table-top RPGs know what I'm talking about.
That's why I've decided to make a website for storing your characters. It's a daunting task, and I've been working on
various versions of it for years; this is only the latest iteration. And yes, it does keep getting better.
My vision for RPGKeeper is that it become a site useful for groups of players as well as individuals. I want GMs and
Players to love it, using it for big campaigns, and as a central clearinghouse for campaign related things. At the
moment, most of these features are missing, but I will be working on adding them just as soon as I get my core target
systems built and working.
I want to rework a lot of the infrastructure so that it's easier to add things to in the future. The basic idea is this:
Switch to Vuetify (I don't like it's API as much but it's worlds faster, with better components.)
Switch to Bootstrap v4 (and Bootstrap-Vue)
Add a base model class that knows if it's dirty (Proxy-based)
Use RxJS to manage state; the current character becomes an observable
Evaluate using vuex instead of RxJS, and the special models.
Move all resource access (like loading characters, systems, etc) into 'resource-access'
Move all state holding and application logic to 'managers'
Make components very, very dumb. They only have their own state, and logic relevant to their display.
Move to webpack parcel.
Implement socket.io so open pages stay in sync as changes are made. (Think, GM opening character pages.)
Move to knex and sqlite (with the option for postgres for deployment)
Move away from one table per system character to a single character record.
The system specific data would be a any() blob of JSON.
Each system would define an ajv schema for it's specific data.
Evaluate and possibly implement Joi instead of AJV.
Any additional data (classes, spells, etc) needed should be treated as static data, and loaded from json files on disk. and loaded as seeds into the database.
Move and refactor systems; they should no longer be their own thing, they should be integrated as just run of the
mill routes/components, as part of the application. No need for shared units like current.
Convert to typescript
Setup a reasonable docker build/deploy pipeline in GitHub.
Setup eslint MR checking in GitHub.
This should really set us up for more complex interactions and a much faster time to implementing Campaigns.