Markdown Converter
Agent skill for markdown-converter
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
CasaNova API is the backend for an international mobility platform, aggregating visa, job market, housing, healthcare, and banking information for expats and immigrants.
Current Status: Active development (Startup Weekend context - 48h sprints)
"type": "module")npm install # Install dependencies npm run dev # Start dev server with hot reload (port 3000) npm start # Start production server npm run typecheck # TypeScript type checking npm run build # Compile TypeScript to dist/ # Scraping commands npm run scrape # Scrape all data sources npm run scrape:visa # Scrape visa info only npm run scrape:job # Scrape job info only npm run scrape:housing # Scrape housing info only
src/ ├── main.ts # NestJS bootstrap entry point ├── app.module.ts # Root module importing all feature modules ├── app.controller.ts # Root controller (/, /health) ├── modules/ # Feature modules (NestJS pattern) │ ├── database/ # Global DatabaseService (SQLite) │ ├── visa/ # Visa info endpoints + scraping │ ├── job/ # Job market endpoints + scraping │ ├── housing/ # Housing endpoints + scraping │ ├── healthcare/ # Healthcare endpoints + scraping │ ├── banking/ # Banking endpoints + scraping │ └── countries/ # Countries list and summaries ├── scrapers/ # Base scraper utilities (fetchPage, extractText, etc.) ├── sources/ # JSON files with scraping source URLs by country ├── scripts/ # CLI scraping scripts └── types/ # Shared TypeScript interfaces
Each domain module follows NestJS conventions:
*.module.ts - Module definition with imports/exports*.service.ts - Business logic + scraping methods*.controller.ts - REST endpointsSQLite database at
data/casanova.db with tables:
countries - Supported countries (seeded on init)visa_info, job_info, housing_info, healthcare_info, banking_info - Domain datascrape_logs - Scraping historyThe DatabaseService is a global singleton that initializes the schema on app start.
Source URLs are defined in JSON files under
src/sources/ (one per domain). Each service has a scrapeCountry(countryCode) method that:
fetchPage() from base-scraperThe base scraper includes robots.txt checking and rate limiting (2s between requests to same domain).
| Prefix | Description |
|---|---|
| Visa requirements and procedures |
| Job market information |
| Housing/rental information |
| Healthcare system, emergency numbers |
| Banking and financial services |
| Countries list and summaries |
Each domain supports: GET list, GET by country, POST scrape trigger.
.js extension (ESM requirement)experimentalDecorators, emitDecoratorMetadata)