etmos.pages.dev
A visual, interactive graph-based application for exploring etymological connections between words
Check out etmos-ai for an AI-powered version with natural language queries and enhanced features
Frontend:
- React 19 with TypeScript
- D3.js for graph visualization
- TanStack Query for data fetching
- Vite for build tooling
- Tailwind CSS for styling
Backend:
- Fastify server with TypeScript
- Node-cache for response caching
- Deployed on Railway
- Clone the repository:
git clone https://github.com/jo56/etmos.git
cd etmos- Install dependencies for all components:
npm run install:allStart both frontend and backend development servers:
npm run devThis will start:
- Backend API server on
http://localhost:54330 - Frontend application on
http://localhost:5173
Both will automatically reload when you make changes to the code.
# Run only the frontend in development mode
npm run client:dev
# Run only the backend in development mode
npm run server:devBuild both frontend and backend:
# Build the client (creates optimized bundle in client/dist)
npm run client:build
# Build the server (compiles TypeScript to server/dist)
npm run server:buildStart the production server:
npm run server:start:prodPreview the frontend production build locally:
cd client
npm run build
npm run preview # Serves on http://localhost:4173- Search: Enter a word in the search bar to create an initial graph
- Expand: Click on any node to reveal its etymological connections
- Settings: Click the settings icon (top-left) or press
Shiftto toggle the settings panel - Themes: Choose from 12 different visual themes in the settings panel
- Max Neighbors: Adjust the maximum number of connections shown per node (1-50)
The backend provides the following endpoints:
GET /api/etymology/search?word={word}&language={lang}- Search for a word's etymologyPOST /api/etymology/initial- Get initial graph data for a wordPOST /api/etymology/neighbors- Get neighbors for a specific nodeGET /api/health- Health check endpoint
Create a .env file in the server directory:
PORT=54330
FRONTEND_URL=http://localhost:5173
NODE_ENV=developmentMIT