Documentation

Documentation

User Guide & Technical Reference for Necessary Reunions Tools

Overview

The Necessary Reunions project reunites historical maps and textual sources from the Dutch East India Company (VOC) archives to reconceptualise Kerala's early modern topography. This documentation provides comprehensive guidance on using the three main tools developed for this project.

The Three Tools

re:Charted

An IIIF viewer and editor for browsing and annotating 30 historical Kerala maps from various archives, including the Leupe collection at the National Archives in The Hague.

GAVOC (Grote Atlas van de Verenigde Oost-Indische Compagnie)

A historical place name database with over 11,000 standardised entries linking historical and modern names with coordinates and categories, serving as a reference dataset for external linking.

Gazetteer

A searchable interface for exploring places located on the 30 maps in re:Charted, showing the history and transitions of places in the Kerala region.

Key Features

  • Web-based and free to use for researchers worldwide
  • IIIF manifest support for standardised image delivery
  • SVG annotation capabilities for precise map markup
  • Integration between annotations and historical place names
  • Public API for external linking and data integration
  • Open source codebase hosted on GitHub

Why This Project?

Historical maps and documents from the VOC tell richer stories when brought back together. The project reunites cartographic and textual sources that were separated by time and archival practice, enabling new insights into early modern Kerala's geography, economy, and society. By making these connections visible and searchable, researchers can trace how places were understood, named, and represented across different sources and time periods.

Getting Started

All three tools are accessible directly through your web browser at necessaryreunions.org. No installation or account creation is required for viewing and exploring the data.

Quick Start Guide

Step 1: Choose Your Tool

Navigate to the homepage and select the tool that fits your research needs. Use re:Charted for map exploration, GAVOC for place name research, or Gazetteer for quick searches.

Step 2: Explore the Interface

Each tool has an intuitive interface designed for researchers. Hover over buttons and interface elements for tooltips explaining their function.

Step 3: Use Search and Filter Functions

All tools support searching by historical or modern place names. Use filters to narrow down results by category, time period, or geographic region.

Accessing the Data

All data created in the scope of this project will eventually be part of the larger GLOBALISE project. The code is freely available on GitHub, and the data can be accessed via public APIs.

re:Charted: IIIF Map Viewer and Editor

re:Charted is an IIIF (International Image Interoperability Framework) viewer and editor specifically designed for viewing and annotating historical Kerala maps from the VOC archives. The tool provides comprehensive functionality for browsing maps, viewing AI-generated annotations, and creating new annotations with linking to external gazetteers.

1. Info Tab: IIIF Viewer Basics

The Info tab provides the foundation for navigating historical maps using the IIIF standard. This interface is designed for researchers who need to examine high-resolution digitised maps in detail.

Core Navigation Features

  • Pan: Click and drag to move around the map surface
  • Zoom: Use scroll wheel or on-screen controls to zoom in/out with deep zoom capabilities
  • Rotate: Rotate the map view to align with different orientations for easier reading
  • Full Screen: Expand to full-screen mode for immersive examination
  • Home: Reset view to default position and zoom level

Info Tab and Manifest Loading

Navigate the IIIF viewer interface and load map manifests

2. Manifest: Metadata and Map Information

Each map in re:Charted is served through an IIIF manifest containing essential metadata. The manifest panel displays comprehensive information about the historical map you are viewing.

  • Title: Full title of the historical map as recorded in archival sources
  • Dimensions: Physical size and digital resolution of the map
  • Source: Archival institution and collection reference (e.g., Leupe collection, National Archives)
  • Date: Creation date or estimated date range of the map
  • Attribution: Cartographer, draughtsman, or surveyor information when available
  • Rights: Usage rights and copyright information

This metadata is crucial for proper citation and understanding the historical context of each map. The manifest follows IIIF Presentation API 3.0 standards, ensuring interoperability with other IIIF-compatible tools and viewers.

3. Map Tab: Georeferencing and Modern Overlay

The Map tab provides georeferenced overlays that align historical maps with modern geographic coordinates. This powerful feature uses Allmaps and Leaflet to enable spatial comparison between historical and contemporary cartography.

Map Tab: Georeferencing

Explore georeferenced overlays and adjust map alignment with modern coordinates

Georeferencing Features

  • Allmaps Integration: Uses Allmaps georeferencing engine to transform historical map coordinates to modern geographic positions
  • Leaflet Base Map: Displays modern OpenStreetMap tiles as reference layer
  • Adjustable Opacity: Slider control to blend historical and modern maps for visual comparison
  • Control Points: View georeferencing control points that anchor the historical map to modern coordinates
  • Transformation Accuracy: Visual indicators showing alignment quality and distortion

4. Annotation Tab: Viewing Mode

For users who are not signed in, the Annotation tab operates in viewing mode, providing read-only access to all annotations on the map. This mode is ideal for researchers who want to explore existing annotations without editing capabilities.

Annotation Viewing Mode

Browse and filter AI-generated and human-verified annotations

Display and Filtering

The annotation list shows all annotations for the currently displayed map canvas, organised with multiple filtering options:

  • AI vs Human Verified: Toggle to filter between AI-generated annotations (from MapReader and Loghi) and human-verified annotations that have been reviewed and confirmed
  • Annotation Type: Filter by type (Text Spotting, Iconography, Georeferencing, Linking)
  • Source: Filter by origin (Loghi AI, Other AI, Human)
  • Assessment Status: View which annotations have been checked and validated

Text Search Function

Search across all annotation text content to quickly locate specific place names, features, or terms on the map. The search function operates across all annotation types and highlights matching results in the list.

Visual Indicators

Each annotation in the list displays icons providing quick information about its properties:

  • Link Icon: Indicates the annotation is part of a linking annotation connecting to geographic location
  • Comment Icon: Shows annotation has associated comments or notes
  • Classification Icon: Displays assigned iconography classification (fort, settlement, ship, etc.)
  • Checkmark Badge: Indicates human verification and assessment status

5. Annotation Tab: Editing Mode

For authenticated users with editing permissions, the Annotation tab transforms into a comprehensive annotation workbench. This mode provides complete control over the annotation process, allowing researchers to refine AI-generated annotations, create new annotations, and establish geographic connections.

Flexible Workflow

The editing steps can be performed in any order according to your research workflow. There is no prescribed sequence – annotators can delete incorrect annotations, add new ones, correct existing content, assign classifications, add comments, and create linking annotations as needed for each map.

5a. Deletion: Managing Annotations

Remove incorrect or duplicate annotations to maintain data quality. The deletion function supports both individual and bulk operations for efficient curation.

Deleting Annotations

Remove individual annotations or perform bulk deletion operations

  • Single Deletion: Select and delete individual annotations that are incorrect or unnecessary
  • Bulk Deletion: Select multiple annotations using checkboxes and delete them in a single operation
  • Confirmation Dialog: Safety prompt prevents accidental deletion of annotations
  • Undo Support: Recent deletions can be reversed if removed in error

Deletion is particularly useful for removing AI-generated annotations that incorrectly identified map decorations, cartouches, or other non-geographic features as text or icons.

5b. Correction: Refining Text and Geometry

Correct and refine existing annotations by editing text content and adjusting SVG polygon boundaries. This step improves the accuracy of AI-generated annotations.

Correcting Annotations

Edit text fields and adjust SVG polygon geometry for precise annotation

  • Text Field Editing: Click to edit annotation text, correcting OCR errors or incomplete transcriptions
  • SVG Polygon Adjustment: Drag polygon vertices to precisely match the boundaries of text or iconography on the map
  • Add/Remove Points: Add new vertices to complex shapes or remove unnecessary points for cleaner geometry
  • Live Preview: See changes reflected immediately on the map as you edit
Polygon Coverage Guidelines

When drawing or correcting SVG polygons, ensure all characters are fully enclosed within the boundary. Zoom in close to verify that polygon edges are near the character edges but do not crop or pass through any part of the letters.

  • Full Coverage: All characters must be completely visible within the polygon boundary
  • Tall Letters: Pay special attention to ascending and descending letters like "f", "p", "g", "y" and capital initials
  • Close Fit: Keep boundaries close to character edges without overlapping the text itself
  • Avoid Inclusions: Try not to include other map elements (icons, borders, other text) within the polygon when possible

These guidelines follow the Machines Reading Maps annotation standards.

5c. Add New: Creating Text and Iconography Annotations

Create new annotations for map features that were not detected by AI systems. This includes both text spotting (place names, labels) and iconography (symbols, icons) annotations.

Adding New Annotations

Create new text spotting and iconography annotations from scratch

  • Text Spotting: Draw a polygon around text on the map and transcribe the content
  • Iconography: Draw a polygon around map symbols, icons, or pictorial elements
  • Drawing Tools: Click to create polygon vertices, double-click to complete shape
  • Metadata Entry: Add annotation body content (text transcription or description)

When drawing new polygons, follow the same coverage guidelines as for corrections: ensure all characters or icon elements are fully enclosed without cropping. Zoom in to verify that polygon boundaries are close to the edges but do not pass through the text or symbols.

Adding new annotations is essential for capturing map features that AI systems miss, such as faded text, unusual iconography, or symbols in non-standard positions. This human curation ensures comprehensive coverage of all map content.

5d. Assign Classification: Categorising Iconography

Assign semantic classifications to iconography annotations using a controlled thesaurus of map symbol types. This structured classification enables systematic analysis of map content across the collection.

Assigning Classifications

Categorise iconography annotations using the controlled thesaurus

  • Thesaurus Selection: Choose from predefined categories (fort, settlement, ship, church, etc.)
  • Hierarchical Structure: Classifications organised by type and subtype
  • Multiple Classifications: Assign multiple categories when a symbol has compound meaning
  • Visual Consistency: Colour-coded badges show classification in annotation list

5e. Comment and Mark: Assessment and Notes

Add comments to annotations and mark them as assessed to track verification progress. This workflow feature supports collaborative annotation projects where multiple researchers review and validate map content.

Commenting and Assessment

Add comments and mark annotations as checked and verified

  • Comment Field: Add notes about annotation quality, uncertainty, or interpretation
  • Assessment Checkbox: Mark annotations as "checked" after human verification
  • Annotation History: Track who made comments and when assessments occurred
  • Quality Control: Filter views to show only assessed or unassessed annotations

The assessment system is crucial for distinguishing between raw AI output and human-verified data. Researchers can focus their work on unassessed annotations or prioritise reviewing AI-generated content flagged with low confidence scores.

5f. Link: Creating Geographic Connections

The linking function is the most sophisticated editing feature, creating linking annotations that connect selected text spotting and iconography annotations in a reading order, associate them with external gazetteer entries, and establish geographic positioning on the map.

Creating Linking Annotations

Link annotations to geographic locations using GAVOC, GLOBALISE, or OpenStreetMap

Linking Annotation Components
  • Reading Order: Select multiple text spotting and iconography annotations and arrange them in reading order (e.g., place name text + settlement icon). Numbered badges appear on selected annotations showing their sequence.
  • Geotag from Thesaurus: Search and select a matching place from one of three external thesauri:
    • GAVOC: Historical place names database specific to Kerala region
    • GLOBALISE Places: Broader VOC-era place name dataset
    • Nominatim/OpenStreetMap: Modern place names and coordinates
  • Point Placement: Click on the map image to add an x/y coordinate point showing the geographic centre of the place. This point serves multiple purposes:
    • Visual marker of the place location on the map
    • Data for improving georeferencing accuracy in future iterations
    • Reference point for spatial analysis of place distribution

Interface Elements

  • Left Panel: Map collection browser with thumbnails and search
  • Centre Viewport: Main map viewing area with annotation overlays
  • Right Panel: Tabbed interface (Info, Manifest, Map, Annotations)
  • Top Navigation: Project links and user authentication

GAVOC: Historical Place Name Database

GAVOC (Grote Atlas van de Verenigde Oost-Indische Compagnie) is a comprehensive database of historical place names from early modern Kerala, containing over 11,000 standardised entries linking historical and modern toponyms with geographic coordinates and semantic categories.

The GAVOC database is based on the comprehensive index in: Schilder, Gunter, Jacques Moerman, Ferjan Ormeling, Paul van den Brink and Hans Ferwerda. Grote atlas van de Verenigde Oost-Indische Compagnie. Volume I: Atlas Isaak de Graaf. Voorburg: Asia Maior, 2006. ISBN 9789074861137. [National Archives, The Hague: 2.14.97, inv.nr. 11.1]

What is GAVOC?

  • Historical Places: A curated collection of place names from Dutch East India Company maps and documents
  • 11,000+ Standardised Entries: Each entry cleaned, verified, and structured for research use
  • Comprehensive Metadata: Historical names, modern equivalents, coordinates, and semantic categories
  • Reference Dataset: Serves as the authoritative linking target for annotations in re:Charted
  • Persistent URIs: Each place has a unique, citable identifier for long-term scholarly reference

GAVOC Database Tutorial

Navigate the GAVOC interface, search for historical place names, and explore the map and table views

Database Structure

FieldDescription
Original NameHistorical place name as it appears on the map
Present NameModern equivalent name
CategoryType of location (settlement, bay, island, region, etc.)
CoordinatesModern geographic coordinates (latitude/longitude)
Map Grid SquareLocation reference on the original atlas
Map ReferenceMap identifier
Page ReferencePage number in the atlas

Interface Overview

GAVOC provides two complementary views for exploring the database: a map-based geographical browser and a table-based detailed view. Both interfaces support full-text search and category filtering.

GAVOC Interface Screenshot

Map and table views with search functionality

Step-by-Step Workflows

1Basic Search Workflow

Step 1: Enter Search Terms

Navigate to the GAVOC page and locate the search box at the top. Enter either a historical Dutch/Portuguese name or a modern place name. The search is case-insensitive and searches across both original and present name fields.

Example searches:

  • • "Cochin" (historical Dutch name)
  • • "Kochi" (modern name)
  • • "Poorten Eyl" (historical island name)
  • • "Kahatola" (modern equivalent)
Step 2: Apply Category Filters

Use the category dropdown to filter results by location type. This narrows down results when searching common terms or exploring specific types of places.

Available categories:

  • • Settlement (stad)
  • • Bay (baai)
  • • Island (eiland)
  • • River (rivier)
  • • Region (regio)
  • • Fort (fort)
  • • Temple (tempel)
  • • Coast (kust)
  • Step 3: Explore Results on Map

    Results appear immediately on the interactive map. Clustered markers group nearby locations. Click clusters to zoom in, or click individual markers to view place details including historical context and modern location.

    Step 4: Review Detailed Information

    Switch to the Table tab to view structured data. The table shows all metadata fields including map grid references, page numbers from the original atlas, and precise coordinates. Click any row to highlight the location on the map.

    Search Results Screenshot

    Map view with clustered markers and popup details

    2Working with the Thesaurus

    Understanding Name Variations

    The Thesaurus tab reveals how place names evolved over time and across different cartographic traditions. It shows relationships between Dutch, Portuguese, and local Malayalam toponyms.

    Example: The place "Cochin" appears with variants like "Cochim", "Cotchym", and "Kochi", showing orthographic variations and modern standardisation.

    Exploring Semantic Relationships

    The thesaurus connects related places through hierarchical and associative relationships. Settlements are linked to their surrounding regions, ports to their associated bays, and historical administrative units to modern equivalents.

    3Using Persistent URIs for Citations

    Accessing Persistent Identifiers

    Each place in GAVOC has a unique, persistent URI that can be used in scholarly citations, linked data applications, and external research projects. Click on any place detail to view its URI.

    https://necessaryreunions.org/gavoc/7954/cochin-kochi
    Linking from External Projects

    Use GAVOC URIs in your own research database, digital edition, or web application. The persistent identifiers ensure long-term stability and enable integration with the broader GLOBALISE infrastructure.

    API Integration

    Programmatically access GAVOC data through the public API. Query by name, category, or geographic bounding box. Results are returned in JSON format for easy integration into your workflows.

    GET /api/gavoc?search=cochin&category=settlementReturns: JSON with place details, coordinates, and metadata

    Map View Features

    OpenStreetMap View

    Standard street map view showing modern roads, settlements, and geographic features for contextualising historical locations.

    Satellite View

    Aerial imagery overlay providing visual context for coastal features, river systems, and topographical relationships.

    Terrain View

    Topographic display highlighting elevation changes, important for understanding defensive positions and trade routes.

    Marker Clustering

    Automatic grouping of nearby locations for clarity at different zoom levels, preventing marker overlap.

    Integration with Other Tools

    GAVOC serves as the reference dataset for the entire Necessary Reunions project, providing authoritative place name data for:

    • re:Charted Linking Annotations: When creating geotagging annotations in the map viewer, GAVOC provides the target locations with persistent identifiers.
    • Gazetteer Search: The Gazetteer tool queries GAVOC data to show which historical maps contain specific places.
    • External Research Projects: The public API enables integration with digital editions, databases, and web applications beyond this project.

    Gazetteer: Place Search Interface

    The Gazetteer provides a streamlined search interface for exploring places located on the 30 maps available in re:Charted. It collects linked and geotagged places from map annotations, building comprehensive place biographies that show the history and transitions of locations in Kerala across different sources and time periods.

    Core Concept

    The Gazetteer aggregates all geotagged annotations from the 30 historical maps in re:Charted, creating a searchable database of places that appear across the collection. Unlike GAVOC, which provides comprehensive historical place name data for the entire Kerala region, the Gazetteer focuses specifically on places that have been annotated and linked on the maps in this project.

    What Makes the Gazetteer Unique?

    • Map-Centric: Every entry is directly linked to one or more historical maps where the place appears
    • Annotation-Based: Places are derived from linking annotations that connect map features to geographic locations
    • Contextual: Shows how often and in what context each place appears across the map collection
    • Biographical: Builds a place biography by aggregating information from multiple maps and time periods

    Gazetteer Search Tutorial

    Learn how to search for places and navigate the Gazetteer interface

    Browsing and Search

    List View

    The default list view displays all places in the Gazetteer as a searchable table. Each entry shows:

    • Place Name: The standardised modern name of the location
    • Historical Variants: Alternative names found on the historical maps
    • Map Count: Number of maps in the collection where this place appears
    • Classification: Category or type of place (settlement, fort, port, etc.)

    Map View

    Switch to map view to see all Gazetteer places plotted on a modern base map. This geographic visualisation helps you:

    • Understand the spatial distribution of annotated places
    • Identify clusters of frequently mapped locations along the coast or inland
    • Explore geographic relationships between places in the collection
    • Click on map markers to view place details and linked maps

    Search Functionality

    The Gazetteer supports flexible search across both modern and historical place names:

    Modern Name Search

    Search using contemporary place names like "Kochi" or "Kannur" to find how these locations appear on historical maps.

    Historical Name Search

    Search using VOC-era names like "Cochin" or "Cananoor" to discover which maps include these historical toponyms.

    Partial Matching

    Use partial search terms to find variations and similar names across the collection.

    Detailed Place Pages

    Click on any place in the Gazetteer to view its detailed page, which aggregates information from all maps where the place appears.

    Exploring Place Details

    Navigate detailed place pages and discover linked maps and annotations

    Place Overview

    The top section of each place page provides essential information:

    • Primary Name: The standardised modern name used as the main identifier
    • Geographic Coordinates: Latitude and longitude of the location
    • Modern Map: Interactive map showing the present-day location
    • Quick Stats: Number of maps featuring this place and total annotations

    Name Variants and Classifications

    The Gazetteer displays all name variations found across the map annotations, showing:

    • Historical Spellings: Different orthographic variants used in VOC-era maps
    • Language Variations: Names in Dutch, Portuguese, and local languages
    • Classifications: Categories assigned to the place (settlement, fort, port, river, etc.)
    • Source Attribution: Which maps contain each name variant

    Links to Maps and Annotations

    Each place page shows all maps where the location appears, providing direct navigation to view the place in its historical cartographic context:

    • Map Thumbnails: Visual previews of each map featuring the place
    • Map Metadata: Title, date, and source information for each map
    • Direct Links: Click to open the map in re:Charted with the place annotation highlighted
    • Annotation Details: View the specific iconography or text annotations linked to this place

    Frequency and Context

    The Gazetteer analyses how often and in what contexts each place appears across the map collection:

    • Temporal Distribution: Timeline showing when the place appears on maps across different decades
    • Map Coverage: Percentage of the collection that includes this place
    • Annotation Types: Breakdown of how the place is represented (iconography, text labels, fortification symbols)
    • Cartographic Prominence: Analysis of how prominently the place is featured on different maps

    Building Place Biographies

    By aggregating information across multiple maps and time periods, the Gazetteer constructs a "biography" for each place showing:

    • Name Evolution: How the place name changed or was standardised over time
    • Functional Changes: Shifts in classification (e.g., from settlement to fortified port)
    • Cartographic Attention: Periods when the place received more or less detailed representation
    • Geographic Context: How the place's relationship to nearby features was depicted across different maps

    Integration with Other Tools

    The Gazetteer acts as a bridge between GAVOC's comprehensive historical database and re:Charted's visual map interface:

    • GAVOC Connection: Places in the Gazetteer link to their GAVOC entries for additional historical and geographic context
    • re:Charted Integration: Click through from Gazetteer to view any place on its original historical map with full annotation context
    • Cross-Reference: Use the Gazetteer to discover which GAVOC places appear on which maps, and which maps contain annotations for specific locations

    Workflow: From Search to Visual Analysis

    1. Search for a place in the Gazetteer using modern or historical names
    2. Review the place page to see frequency, name variants, and map coverage
    3. Click on a specific map to open it in re:Charted viewer
    4. Explore the annotation in visual context with surrounding features
    5. Use linking annotations to discover related places and iconography
    6. Cross-reference with GAVOC for broader historical and geographic context

    API Documentation

    The Necessary Reunions project provides public APIs for accessing place name data and integrating with external research projects and datasets.

    GAVOC API

    The GAVOC API provides programmatic access to the historical place name database, allowing you to query locations and retrieve their historical and modern names, coordinates, and categories.

    GET /api/gavoc
    Retrieve a list of places with optional filtering

    Query Parameters

    ParameterTypeDescription
    searchstringSearch term for place names
    categorystringFilter by location category
    limitintegerNumber of results to return (default: 50)
    offsetintegerPagination offset

    Example Request

    GET https://necessaryreunions.org/api/gavoc?search=Cochin&category=settlement&limit=10

    Example Response

    {
      "places": [
        {
          "id": 7954,
          "originalName": "Cochin",
          "presentName": "Kochi",
          "category": "stad, settlement",
          "coordinates": "9.9667° N, 76.2833° E",
          "mapGridSquare": "B3",
          "mapReference": "II-28",
          "pageReference": "p. 338"
        }
      ],
      "total": 1,
      "limit": 10,
      "offset": 0
    }

    Gazetteer API

    Access places from the Gazetteer database, which contains all locations annotated on the 30 maps in re:Charted.

    GET /api/gazetteer
    Search places in the gazetteer database

    IIIF Manifests

    All maps are served using the IIIF (International Image Interoperability Framework) protocol, allowing integration with any IIIF-compatible viewer or application.

    GET https://globalise-huygens.github.io/necessary-reunions/manifest.json
    Access the main IIIF collection manifest

    Rate Limits & Usage

    The APIs are freely accessible for research purposes. Please be considerate with request volume. For large-scale data access, consider downloading the full datasets from GitHub.

    For Developers

    The Necessary Reunions codebase is open source and available on GitHub. This section provides technical details for developers who want to run the project locally, contribute, or adapt it for their own research.

    Technology Stack

    • Framework: Next.js 14 with App Router
    • Language: TypeScript
    • Styling: Tailwind CSS
    • Map Viewer: OpenSeadragon (IIIF)
    • Modern Maps: Leaflet with OpenStreetMap
    • Annotations: W3C Web Annotations (AnnoRepo)
    • Package Manager: pnpm
    • Deployment: Netlify

    Local Development Setup

    Prerequisites

    • Node.js 22 or higher
    • pnpm package manager
    • Git

    Installation Steps

    1. Clone the repository
    git clone https://github.com/globalise-huygens/necessary-reunions.git
    cd necessary-reunions
    2. Install dependencies
    pnpm install
    3. Set up environment variables
    cp .env.example .env.local
    # Edit .env.local with your configuration
    4. Run the development server
    pnpm dev

    The application will be available at http://localhost:3001

    Environment Variables

    VariableDescriptionRequired
    ANNO_REPO_TOKEN_JONAAuthentication token for AnnoRepoYes
    NEXTAUTH_SECRETSecret for NextAuth.js authenticationYes
    NEXTAUTH_URLBase URL for authentication callbacksYes

    Project Structure

    necessary-reunions/
    ├── app/                    # Next.js app directory
    │   ├── api/               # API routes
    │   ├── viewer/            # re:Charted viewer pages
    │   ├── gavoc/             # GAVOC tool pages
    │   └── gazetteer/         # Gazetteer pages
    ├── components/            # React components
    │   ├── viewer/           # re:Charted components
    │   ├── gavoc/            # GAVOC components
    │   ├── gazetteer/        # Gazetteer components
    │   └── shared/           # Shared UI components
    ├── hooks/                 # Custom React hooks
    ├── lib/                   # Utility functions and types
    │   ├── viewer/           # IIIF and annotation utilities
    │   ├── gavoc/            # GAVOC data processing
    │   └── gazetteer/        # Gazetteer utilities
    ├── data/                  # Static data and scripts
    │   ├── scripts/          # Python processing scripts
    │   └── manifest.json     # IIIF collection manifest
    └── public/               # Static assets

    Key Architectural Patterns

    IIIF-First Design

    The application is built around the International Image Interoperability Framework (IIIF) for handling historical maps and manuscripts. All images are served via IIIF Image API, and metadata follows the IIIF Presentation API specification.

    Multi-Layer Annotation System

    Four distinct annotation types with different data sources:

    • Local: User-created annotations with full CRUD operations
    • External: AI-generated annotations from AnnoRepo service
    • Linking: Relationship annotations between targets
    • Georeferencing: Generated during manifest creation for map overlay

    Service Resilience Patterns

    Critical anti-pattern prevention for external service failures. All external API calls use timeout controllers with graceful fallbacks to prevent UI crashes.

    Python Scripts for Data Processing

    The data/scripts/ directory contains Python pipelines for:

    • make_manifest.py: Generate IIIF manifests from CSV data
    • download_images.py: Batch download using dezoomify-rs tool
    • textspotting/spot_text.py: AI text recognition pipeline
    • segmentation/segment_icons.py: Icon detection with SAM model

    Adapting for Your Own Project

    To adapt this codebase for your own historical map project:

    1. Prepare your images: Convert your historical maps to IIIF-compatible format
    2. Create manifests: Use the make_manifest.py script as a template
    3. Set up AnnoRepo: Configure your own AnnoRepo container for annotations
    4. Customise the UI: Update branding, colours, and text in the components
    5. Deploy: Use Netlify, Vercel, or your preferred hosting platform

    Contributing

    Contributions to the Necessary Reunions project are welcome. Whether you're fixing bugs, improving documentation, or proposing new features, your input helps advance digital humanities research.

    Opening Issues

    If you encounter bugs or have feature requests, open an issue on GitHub. Include:

    • Clear description of the problem or suggestion
    • Steps to reproduce (for bugs)
    • Expected vs actual behaviour
    • Screenshots if applicable
    • Browser and device information

    Pull Requests

    To contribute code changes, fork the repository, create a branch, make your changes, and submit a pull request. The project uses automated linting and formatting (ESLint and Prettier).

    Contact the Team

    For questions about the project or collaboration opportunities, contact:

    • Dr Manjusha Kuruppath - Project Lead (Huygens Institute)
    • Leon van Wissen - Technical Lead (University of Amsterdam)
    • Jona Schlegel - Developer (Huygens Institute / archaeoINK)

    Acknowledgements

    This project is funded by the NWO XS grant (March–December 2025) and conducted at the Huygens Institute. It builds upon the broader GLOBALISE project, which aims to unlock the archives of the Dutch East India Company for researchers worldwide.