isor.is
The new website of Iceland GeoSurvey.
Overview
ÍSOR, Iceland GeoSurvey, is an independent state research institute for geothermal energy, geology, groundwater and the seabed, advising energy companies at home and abroad. It is Vefapp's largest project to date and the first public institution in the portfolio. The old site ran on , the English edition was a separate install, and staff could change little themselves. We built a new site from scratch on and : 396 pre-rendered pages in Icelandic and English, and a where ÍSOR staff write news, projects, services and the staff directory themselves. The institute's geological map viewer is hosted inside the site. It went live on isor.is on 4 September 2026.
Public institution · Energy research
Problem
The old isor.is was a site with plugins to keep patched and a developer in the loop for changes. The English edition was a separate install on en.isor.is with fewer pages, and the URLs followed no rule. The organisation chart was an image. An institute that publishes research in two languages needs a site its staff can write themselves. A public-sector site also has to meet accessibility and privacy requirements, and the old links in reports and papers have to keep working.
Approach
with pre-rendered pages over , with on every table. Icelandic and English live side by side in one system with on every . The covers news, projects, services, staff, job openings, home-page slides and announcements, plus a media library, a newsletter and an inbox for enquiries. Signing in requires a code, and the database itself separates administrators from editors. We migrated the content with scripts: 92 articles, 14 services, 12 projects and 52 staff. We mapped 166 old URLs from both sites so they land where they should. The ÍSOR map viewer is bundled with and hosted inside the site, and a watcher checks every hour that the map servers still render.
Outcome
The domain switched on the scheduled day, 4 September 2026, and ÍSOR staff run the content themselves. Every page is built before a visitor asks for it and refreshes on its own when an editor saves. The old links work, the English edition matches the Icelandic one, and the monitoring reports a fault before a visitor does.
Map viewer
The ÍSOR map viewer (Kortasjá) is an interactive map of Iceland's geology, geothermal areas, groundwater, geophysics and seabed, with dozens of layers and separate land and ocean modes. ÍSOR's own GIS team writes it on Esri's . It used to fetch hundreds of small files from Esri's CDN on every visit. We take their files unchanged, bundle them with into one 378 KB file on every build, and host the viewer on isor.is together with the SDK's runtime assets. The data still streams from ÍSOR's map servers. The site's theme and language follow into the viewer, it runs under its own , and a watcher renders a map tile every hour to confirm the servers still answer.
Key features
- 01Bilingual for news, projects, services, staff and job openings
- 02Home-page slides with photo or video, and announcements that appear and expire on a schedule
- 03Media library with uploads and galleries, draft preview on the site itself
- 04Translate button on Opus 5: an English draft from the Icelandic, an editor reads and saves
- 05The ÍSOR map viewer hosted inside the site, bundled from the with
- 06News shared to Facebook, Instagram and LinkedIn straight from the editor, chosen per article
- 07Newsletter with double opt-in and an enquiry inbox with a copy to ÍSOR's mailbox
- 08Hourly watcher: map servers, the statistics service, the mail domain and social tokens
- 09First-party analytics without cookies, aggregated in for the reports page
- 10Live figures from ÍSOR's measurement database on the home page: this year's borehole logs, metres and samples
- 11166 old URLs from isor.is and en.isor.is land where they should, a 404 monitor catches the rest
- 12Light and dark themes, and a pause control on the home-page slider
Editorial
- 01Icelandic and English side by side in one form, with drafts and publishing, and no deploy needed to save
- 02A body editor that stores plain text rather than , so nothing foreign reaches the page
- 03Home-page slides with photo or video and an optional display window, for an event say
- 04An announcement bar that switches itself on and off on schedule
- 05Media library: uploads, reuse and captioned galleries in news and projects
- 06Translate button: Opus 5 writes an English draft into the same fields, an editor reads and saves, never automatically
- 07Draft preview on the site itself before publishing
- 08A Ctrl+K command palette that jumps to every part of the admin
Security
- 01A code on every sign-in, checked again in every server action
- 02 on every table: the public reads published content only, drafts are never visible
- 03Administrator and editor roles separated in the database itself, not only in the interface
- 04Sign-ins expire after 24 hours and after ten idle minutes, sweeps stale sessions inside the auth database
- 05A enforced site-wide, with a wider variant for the map viewer alone
- 06Form rate limiting in , IP addresses stored only as salted hashes
- 07Personal data deleted automatically on the privacy policy's schedule: enquiries after 24 months, unsubscribes after 6
- 08A production build refuses to ship when required settings are missing
- 09Four-category cookie consent, data hosted in the EU
SEO & migration
- 01Old URLs mapped from a crawl of isor.is and en.isor.is: 166 URLs, 84 fixed rules and a database lookup for old article paths
- 02Bilingual sitemap with , RSS in both languages, robots and a canonical on every page
- 03 for the organisation, services, news as BlogPosting and breadcrumbs
- 04An OG image per page and a dedicated 4:5 JPEG card for Instagram
- 05 ping and search-engine verification codes editable in the admin
- 06A 404 monitor with one-click and 301/302 rules from the database, applied in middleware
- 07Visitors outside Iceland get English on their first visit, search engines see Icelandic as the primary edition
- 08The domain switch rehearsed in advance: a script replays around 200 against the site before and after the move
Operations & monitoring
- 01An hourly watcher has ÍSOR's map servers render a real map tile, not just return metadata
- 02The same watcher checks the statistics service, that the mail domain is still verified at , and that social tokens are valid
- 03One alert when something breaks, a daily reminder while it lasts, one when it recovers
- 0490 days of check history on the admin's monitoring page
- 05Unexpected server errors are reported automatically with a traceable digest
- 06First-party analytics without cookies or IP addresses, aggregated by a function
- 07The build fails if public pages stop being pre-rendered, and CI runs typecheck, ESLint, 23 test files and a build on every merge
Social & newsletter
- 01Sharing to Facebook, Instagram and LinkedIn straight from the article editor, ticked per article
- 02Instagram gets its own 4:5 card with the article's photo, rendered on the server
- 03Every attempt is logged before it goes out, so a retry never duplicates a post
- 04Newsletter with double opt-in, signed unsubscribe links and a send history
- 05An enquiry inbox with status, a copy to ÍSOR's mailbox and a receipt to the sender
- 06All mail goes through from isor.is with a DKIM signature, so ÍSOR's mail stays out of spam
Performance & accessibility
- 01396 pages pre-rendered at build time and served from the CDN, refreshed automatically when an editor saves
- 02WebP images at the right size for each device, no layout shift
- 03The map viewer loads no code from Esri's CDN: one 378 KB file and modulepreload across the whole module graph
- 04Fonts hosted on the site itself, no calls to Google Fonts
- 05Keyboard-friendly menus, a skip-to-content link, visible focus rings and respect for reduced motion
- 06A pause control on the home-page slider ( 2.2.2) and a dedicated accessibility statement
- 07Light and dark themes that follow the device setting, inside the map viewer too
Outcomes
- 396
- Pre-rendered pages in two languages
- 92
- Articles moved off WordPress
- 52
- Staff in the directory
- 166
- Old URLs that land right
- 63
- Versioned database migrations
- 24/7
- Map-server monitoring
Stack
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- next-intl
- Supabase Postgres
- Supabase Auth (TOTP MFA)
- Supabase Storage
- pg_cron
- TipTap
- Anthropic Claude (Opus 5)
- ArcGIS Maps SDK
- esbuild
- Resend
- Vitest
- Vercel
Related services



