Migration Project
Overall goal: move as many old wikitext projects to markdown with folder structure as possible. Migrate campaigns from the bertball wiki to the campaigns folder.
Phase 0: Preparation
- [x] Identify which projects should be moved (e.g. which campaigns within Bertball belong in /campaigns, which documents should be in /faerun, etc.)
- [x] Define the folder structure standards for systems, settings, and campaigns
- [x] Determine organizing structure for campaigns (era-based?)
- [x] Delete wikiroots that shouldn't be here and move them to an archive (see Delete List)
- [x] Rename wikiroots that should be kept but need a new name (see Rename List)
Folder Structure Standards
Campaigns
For campaigns that don't already have a folder structure, the following default should be used:
- /background (optional, used to add worldbuilding and campaign history that isn't already covered in the setting documentation; can also be a top level file called background.md if it fits)
- /characters
- /main (PCs and important NPCs)
- other folders as needed; can be region-based or episode-based
- /episodes
- one folder per episode, named with the episode ID (e.g. ABC1-1, DEF2-3, etc.)
- each episode folder has an index.md describing the episode and linking to sessions
- /sessions
- one file per session, named with the session ID (e.g. ABC1-1a, DEF2-3b, etc.)
- /stories (optional, used for fiction taking place outside the session structure)
Naming conventions:
- Every campaign has a name with an abbreviation, preferably three letters. Examples:
- LND: Legends Never Die
- HFR: Heroes for Rent
- Episodes belong to a series, and both are incremented integers. For example, the first episode of the first series is 1-1, whereas the 5th episode of the 3rd series is 3-5. The episode name is separate and can be whatever you want.
- Sessions are incremented lowercase characters. The first session is a, the second b, etc.
- Examples:
- COT1-3a: Campaign "Coming of Twilight", Series 1, Episode 3, Session a
- SOL2-5d: Campaign "Story of a Lifetime", Series 2, Episode 5, Session d
Settings
For settings that don't already have a folder structure, the following default should be used:
- /places
- /cities
- /realms
- /adventuring-sites
- /people
- /ethnicities
- /nobility-and-royalty
- /organizations
- /religions
- /things
- /coins and commerce
- /magic items and artifacts
- /technology
- /time
- /calendars
- /history
- /campaigns
- one folder per campaign that takes place in this setting, with the same structure as described in the Campaigns section above
Systems
For systems that don't already have a folder structure, the following default should be used:
- /character (rules for character creation and advancement)
- /advancement
- /ancestry-and-background
- /attributes
- /basics
- /classes (when present)
- /equipment
- /feats
- /powers
- /skills
- /enemies (monster manual, rules for monster creation, etc.)
- /system (rules for gameplay)
- /combat
- /conditions
- /encounters
- /formulas
- /exploration
- /other (for rules that don't fit into the above categories)
Delete List
Delete all of these wikiroots and put them in a separate archive:
- /campaigns
- /exp
- /fr
- /pda2
- /uw
- /lnf
- /settings
- /BJH
- /City of Splendors
- /loretan
- /loretan-old
- /*horizons
- /space drow
- /systems
- /2025 03 01
- /Horizons
- /Legends
- /Next
- /Sphere
Rename List
Needs a new name:
- /campaigns
- /New Space Game
- /New Vegas
- /Untitled Space Game 2023
Phase 1: Wikitext to Markdown
- [ ] Convert all identified wikitext documents to markdown format, keeping documents in the same location. Guidelines:
- [ ] Wikitext documents should already be in standard wikitext format (circa 2007-2010), so most conversion should be straightforward.
- [ ]
- [ ] Where advanced mediawiki-specific features such as templates, parser functions, etc. are found, do not attempt to duplicate Mediawiki functionality. Instead, replace any function calls in the form of key-value pairs with a simple table. Embed codes should become simple links to the embedded document. Any other wikitext features that don't have a clear markdown equivalent, or would require significant engineering effort to replicate, should be ignored and left as-is in the markdown (e.g. {{Infobox character}} can just be left as-is in the markdown, without trying to convert it to a custom React component or something like that).
- [ ] Convert all document filenames to be URL-friendly (lowercase, spaces replaced with hyphens, no characters invalid in a URL, etc.).
- [ ] For internal document wikilinks, use the Ursa markdown link format, i.e. [[Foo]] becomes Foo. Note: previous requirement to convert to URL-friendly names means that the link target should also be URL-friendly, e.g. [[Foo Bar]] becomes Foo Bar.
- [ ] For Talk pages, convert to regular pages with url friendly names (i.e. change the colon to something else), and add link to the original page (at the top) to its talk page.
- [ ] For images, if wikitext specifies an image size (e.g. [[Image:Foo.jpg|250px]]), use the Pandoc/R Markdown syntax for image sizing, i.e.
{width=250px}. If no size is specified, just use. TODO: implement this extension in Ursa - [ ] For REDIRECT pages, just render directly, i.e. #REDIRECT [[Foo]] becomes a "Redirect: Foo" in markdown.
- [ ] Mediawiki discourages the use of H1 headers, so most wikitext documents will have only h2/h3/etc. If no h1 header is present, promote all headers in the document. Thus "==Foo==" becomes "# Foo", "===Bar===" becomes "## Bar", etc. If an h1 header is already present, keep all headers as-is (besides converting them to MD).
- [ ] Wikitext tables: Convert
{| ... |- ... || ... |}syntax to GFM pipe tables. Drop HTML attributes (class=,style=,bgcolor=,cellspacing=, etc.) that have no markdown equivalent. For simple key-value infobox tables, a two-column markdown table is fine. - [ ] Bold/italic:
'''bold'''โ**bold**,''italic''โ*italic*. - [ ] Headers:
=H1=โ# H1,==H2==โ## H2,===H3===โ### H3, etc. Strip the trailing=signs as well. - [ ] Bullet lists:
*โ-,**โ-,***โ-. Preserve nesting depth. - [ ] Categories:
[[Category:SomeCategory]]lines at the bottom of pages should be not be rendered in md. Add frontmatter attributes, e.g.categories: Fooorcategories: \n - Foo\n - Barif there are multiple categories. - [ ] External links:
[http://example.com/ Link Text]โ[Link Text](http://example.com/). Bare bracketed URLs[http://example.com/]โ<http://example.com/>. - [ ] Piped wikilinks:
[[Page Name (Qualifier)|Display Text]]โ[Display Text](./page-name-qualifier.html). The link target should be URL-friendlified as usual. - [ ] Indented text / "Main Article" pattern: Lines starting with
:(wikitext indent) should have the:stripped. The common pattern:''Main Article: [[Foo]]''โ*Main Article: [Foo](./foo.html)*. - [ ] Inline HTML: Strip wiki-specific tags (
<includeonly>,<noinclude>,<nowiki>,<div class="...">with wiki-specific classes). Preserve simple HTML that markdown supports (<br>,<img>) or convert where possible. Raw<img src="...">tags can be left as-is. - [ ] Namespace-prefixed files: Handle files with MediaWiki namespace prefixes:
Template:*files โ delete (template definitions won't be replicated)Category:*files โ delete (category pages are typically empty)Image:*files โ delete (these are empty placeholder pages, not actual images)User:*andUser talk:*files โ deleteFict:*files โ rename to strip theFict:prefixSpecial:*files โ evaluate case-by-case; most can be deleted
- [ ] Empty files: Delete any files that are completely empty or contain only whitespace.
- [ ] Encoding artifacts in filenames: Fix filenames containing mojibake patterns like
รยขรขโยฌรขโยข(mangled UTF-8 for'),รฦsequences, etc. Rename to the correct Unicode characters or simplified ASCII equivalents. - [ ] Template parameter syntax: Files containing
{{{parameter}}}(triple-brace template variable definitions) are template definition files and should be deleted along with otherTemplate:*files.
- [ ] Find all extensionless images, determine their correct extension by looking at the file (hopefully this can be determined by analyzing the first few bytes, not using LLM or computer vision), add the correct extension, and update all links to those images accordingly
- Use the "file" linux command or equivalent. Example:
file --brief --mime-type "$f"will return the mime type of the file, which can be used to determine the extension.
- Use the "file" linux command or equivalent. Example:
Phase 1.5: Bertball Wiki Pruning
- [ ] For each document, analyze the content and determine if it is a game mechanic copied from a system, such as a page describing the feat Power Attack, or a page describing the spell Magic Missile. If so, delete it.
- [ ] For each document, analyze if it appears to be nonsense or a spam post from back when the wiki was public and open to editing. If so, delete it.
Phase 2: Content-Aware Migration
- [ ] Move campaigns, systems, etc that are in the Bertball wiki to the appropriate location in the new folder structure, updating links as necessary
Phase 3: Folder Restructuring
- [ ] Within each project, restructure folders to match the new standards (e.g. move character documents into a "characters" folder, etc.), and update links as necessary
Bonus Phase: Image Extension Repair
- [ ] A lot of Aurora wikis have extensionless images. For each extensionless image, read the image to determine its correct extension, rename the image, and update all links to that image accordingly.