A comprehensive platform for runological research and analysis of Scandinavian runic inscriptions. Combines modern web technology with AI-driven analysis using Google Gemini 2.0 Flash to help researchers analyze, date, and understand rune stones from the Viking Age and earlier periods.
- Runic Inscriptions Database - Extensive database with coordinate data, dating, and metadata
- AI Analysis - Automatic analysis and dating with Google Gemini
- Interactive Maps - Visualization of rune stones, fortresses, trade routes, and historical locations
- Royal Chronicles - Database of historical kings, dynasties, and sources
- Genetic Data Integration - Archaeological genetic data
- Admin Panel - Comprehensive data management and import tools
- Multi-language Support - Swedish and English
- React 18.3.1
- TypeScript
- Vite
- Tailwind CSS
- shadcn/ui
- React Router
- TanStack Query
- React Leaflet 4.2.1
- Supabase - Backend-as-a-Service with PostgreSQL
- Project ID:
mnuifmcjspeaauzehasj - Database:
runic-research-db
- Google Gemini 2.0 Flash - AI analysis
- Google Maps API - Geocoding and mapping
- Node.js and npm installed (install with nvm)
- Access to Supabase project credentials
-
Clone the repository
git clone https://github.com/expandtalk/valhall.git cd valhall -
Install dependencies
npm install
-
Setup environment variables
cp .env.example .env
-
Configure API credentials
Open
.envand fill in the variables:-
Supabase credentials - Contact the project administrator or:
- Request access to the Supabase project at https://supabase.com/dashboard
- Once granted access, go to Settings → API to get your credentials
-
Google Gemini API key (optional) - Get from https://makersuite.google.com/app/apikey
-
Google Maps API key (optional) - Get from https://console.cloud.google.com/
Important: Never commit
.envto version control - it's in.gitignorefor security -
-
Start development server
npm run dev
The app will be available at
http://localhost:5173
# Start development server
npm run dev
# Build for production
npm run build
# Run linting
npm run lint- Environment variables in
.envare not tracked by git (protected in.gitignore) - The
.env.examplefile shows which variables are needed but contains no sensitive data - Never share API keys or database credentials publicly
- Always use environment variables for sensitive data
The database includes tables for:
- Runic inscriptions
- Geographic data (parishes, hundreds, folk groups, cities, fortresses)
- Historical data (kings, dynasties, sources)
- Genetic data (individuals, markers, populations)
- Religious sites (monasteries, churches, bishoprics)
- Trade routes and goods
- Artifacts and carvers
See CLAUDE.md for detailed database documentation.
The application can be deployed as a static site or with a Node.js server. The Vite build output is suitable for any static hosting service.
When contributing:
- Create a new branch for your feature
- Make your changes
- Commit with clear, descriptive messages
- Push to your branch
- Create a pull request
valhall/
├── src/
│ ├── components/ # React components
│ ├── pages/ # Page routes
│ ├── services/ # External services (Gemini, Maps)
│ ├── types/ # TypeScript types
│ └── utils/ # Helper functions
├── supabase/
│ ├── migrations/ # Database migrations
│ └── functions/ # Edge Functions
├── public/ # Static assets
└── README.md # This file
- Full project documentation: see
CLAUDE.md - Supabase Dashboard: https://supabase.com/dashboard/project/mnuifmcjspeaauzehasj
- Questions or issues: Create a GitHub issue or contact the project administrator