SaaS Product Case Study
ViewKin
A kintone data viewer platform that lets teams create access-controlled public views of their operational data — without sharing credentials or exposing the native admin UI.
This project turned kintone into a backend for configurable, shareable data surfaces. The key challenge was designing an access model flexible enough to cover public links, password protection, and login-gated views — while keeping the kintone connection secure regardless of which access mode was chosen.
Core result
Controlled external access
Teams can publish specific kintone data as external views with fine-grained access control. No kintone login required for viewers — and no credentials ever leave the server.
Access modes
4 modes
Public, password-protected, login-gated, and signed URL — each viewer is configured independently.
kintone proxy
Server-side only
All kintone API calls are proxied server-side. Credentials are never exposed to the browser regardless of access mode.
Audit trail
Per-request logs
Every viewer access is logged with auth mode and result — granted, denied, or error — for audit and debugging.
01
Problem
kintone data was only accessible through the native kintone UI — which required admin credentials, offered no fine-grained access control for external viewers, and exposed far more surface area than most sharing scenarios needed. Teams had no way to share a specific operational view with an external partner or stakeholder without handing over login credentials.
02
Constraints
The kintone API token had to stay server-side regardless of which access mode was configured. Different viewers also needed different security levels — some views were safe to make fully public, others needed password gates or login requirements — without complex per-user kintone setup.
- kintone credentials must never reach the client regardless of viewer access mode
- Schema cache needed to reduce live kintone API calls on every page load
- Four access modes must be configurable per viewer without code changes
- Access logs must be granular enough to debug auth failures across access modes
03
Approach
Each viewer is a configured wrapper around a kintone app. The access mode — public, password, login, or signed URL — determines how the platform authenticates the incoming request before proxying the kintone fetch. The kintone connection details and schema cache live in Supabase; the viewer page resolves the access check server-side before any data is returned.
- Server-side kintone proxy — all API calls happen in Next.js route handlers
- Schema cache stored in Supabase to reduce live field-schema fetches
- Access log per request with auth mode, result, and timestamp
- Viewer status (draft / published / archived) controls public reachability independently of access mode
04
Dashboard Design
The management surface was designed for operators configuring and monitoring viewers, not engineers reading logs. The dashboard surfaces what matters: which viewers are live, how they are being accessed, and whether any access attempts are being denied.
- Viewers list with status badge and access mode indicator at a glance
- URL management for signed URL generation and rotation
- Per-viewer analytics showing access patterns over time
- Settings for kintone app ID, API token, and schema refresh per viewer
05
Outcome
Teams can publish specific kintone views externally with the access model that fits the use case — a public dashboard, a password-protected partner view, or a login-gated internal link. kintone credentials stay server-side throughout, and every access attempt is logged for audit and debugging.
Continue Exploring
Fun Tone is also live.
Each case study covers a different part of the stack — see how the same engineering principles show up across different problem types.