Riset Akademis, Disintesis AI — Asisten riset ilmiah bertenaga kecerdasan buatan untuk membantu akademisi Indonesia mencari, memetakan indeks SINTA/Garuda, dan menyintesis literatur ilmiah skala nasional & global secara instan.
Live Demo: https://research.fuenzer.web.id
Built for JuaraVibeCoding Season 1 Hackathon by Google.
- The Problem We Solve
- Our Solution
- What Makes Us Unique
- Full Architecture
- Features
- Tech Stack
- Getting Started
- Project Structure
- Security
- License
Kriteria Penilaian #1 — Masalah / Problem (30%)
Fuenzer Research dibangun untuk akademisi, mahasiswa S1/S2/S3, dan peneliti Indonesia yang menghadapi hambatan sistemik dalam proses riset literatur:
| Masalah | Dampak |
|---|---|
| Tidak ada tool yang memetakan tier SINTA (1-6) secara otomatis | Peneliti harus cek manual satu per satu di situs SINTA untuk menentukan kualitas jurnal |
| Database Garuda (portal riset nasional) sulit di-search secara programatik | Ribuan artikel Indonesia tidak terekspos ke tool riset modern |
| Tool riset global (Elicit, Semantic Scholar) tidak mengenal ekosistem akademik Indonesia | Peneliti Indonesia terpaksa menggunakan banyak platform terpisah |
| Membaca 10-20 abstrak untuk literature review memakan 2-4 jam | Waktu riset terbuang untuk tugas repetitif yang bisa diotomasi AI |
- 300.000+ mahasiswa pascasarjana dan 100.000+ dosen di Indonesia membutuhkan akses cepat ke literatur terakreditasi
- SINTA sebagai standar akreditasi nasional tidak terintegrasi dengan tools riset manapun secara otomatis
- Era AI memungkinkan sintesis literatur dalam hitungan detik — tetapi belum ada yang melakukannya untuk konteks Indonesia
- 🎓 300K+ Mahasiswa S2/S3 Indonesia
- 👨🏫 100K+ Dosen & Peneliti Aktif
- 📚 15.456 Jurnal Terakreditasi SINTA
- 📄 3.6M+ Artikel di Database Garuda
- 🌍 200M+ Publikasi Global (OpenAlex)
Fuenzer Research menjembatani kesenjangan antara indeks akademis lokal Indonesia dengan tools riset global — sesuatu yang belum dilakukan platform lain.
Kriteria Penilaian #2 — Solusi / Solution (40%)
Fuenzer Research dirancang dengan filosofi "Zero Friction Research" — pengguna bisa mulai riset dalam 3 detik tanpa perlu registrasi:
| Aspek UX | Implementasi |
|---|---|
| Intuitif | Search bar langsung di hero section, zero sign-up required. Autocomplete "Did you mean?" dari OpenAlex |
| Delightful | Narrative skeleton loader 3 fase ("Searching → Filtering → Synthesizing"), animasi rotating text, glassmorphism cards |
| Responsif | Full mobile support — AI panel full-screen di mobile, breakpoint handling di setiap komponen |
| Dark Mode | Implementasi penuh dengan design token system (Fuenzer Teal, Cloud Canvas, Ink Black, dll) |
| Bilingual (i18n) | Seluruh UI tersedia dalam Bahasa Indonesia dan English — bisa di-toggle secara real-time |
| Accessible | Semantic HTML, contrast ratio yang memadai, keyboard navigation support |
Berikut hasil nyata yang Fuenzer Research berikan kepada pengguna:
| Tanpa Fuenzer Research | Dengan Fuenzer Research |
|---|---|
| Buka SINTA → cek tier manual → 15 menit per jurnal | Pemetaan SINTA otomatis dalam <1 detik |
| Buka 3-4 platform terpisah (Scholar + SINTA + Garuda + Books) | 1 search query → 4 sumber sekaligus |
| Baca 10 abstrak → 2-3 jam untuk literature review | AI synthesis dalam <5 detik |
| Copy-paste sitasi manual ke berbagai format | 5 format sitasi (APA/Harvard/MLA/Chicago/Vancouver) + BibTeX export |
| Tidak bisa compare multiple papers sekaligus | AI Compare: pilih referensi → tanya AI tentang perbandingan |
graph TD
classDef step fill:#fafafa,stroke:#0d9488,stroke-width:2px,color:#262626;
classDef accent fill:#0d9488,stroke:#0f766e,stroke-width:2px,color:#fff;
Step1["🔍 1. CARI<br/>Pengguna memasukkan topik riset dan menyaring berdasarkan Tipe, Cakupan, dan Indeks"]
Step2["🚀 2. TEMUKAN<br/>Permintaan paralel ke OpenAlex, SINTA, Garuda, dan Google Books dengan pemetaan tier SINTA otomatis"]
Step3["🧠 3. SINTESIS<br/>Google Gemini 3.1 Flash Lite membaca abstrak untuk menghasilkan ringkasan terstruktur"]
Step4["💬 4. INTERAKSI<br/>Menyaring, mengurutkan, menandai referensi, mengajukan pertanyaan lanjutan, atau membandingkan makalah"]
Step5["📂 5. EKSPOR<br/>Mengunduh laporan PDF, ekspor massal ke ZIP, menyalin format sitasi, atau ekspor BibTeX"]
Step1 --> Step2 --> Step3 --> Step4 --> Step5
class Step1,Step2,Step3,Step4,Step5 step;
Kriteria Penilaian #3 — Keunikan / Uniqueness (30%)
Fuenzer Research bukan wrapper ChatGPT dan bukan template standar. Berikut yang membedakan kami:
| Aspek | Detail |
|---|---|
| SINTA Auto-Mapping | Satu-satunya platform yang secara otomatis memetakan tier SINTA (1-6) ke hasil pencarian literatur. Tidak ada tool riset manapun yang melakukan ini |
| Garuda SQLite 652K | Kami mengkurasi 652.144 artikel dari database Garuda ke SQLite lokal — effort data engineering yang signifikan untuk aksesibilitas riset Indonesia |
| Custom Design System | Bukan Material UI / Chakra / template. Kami mendesain dari nol: Firecrawl-inspired aesthetic dengan token warna, tipografi, dan komponen unik |
| Dual AI Mode | Search Mode (cari literatur baru) + Ask Mode (tanya AI tentang referensi terpilih) dalam satu panel interaktif |
| Anti-Hallucination Pipeline | AI hanya menjawab berdasarkan abstrak yang diberikan, bukan pengetahuan umum. Temperature 0.3 + strict academic prompt |
- Narrative Skeleton Loader
- 3-phase loading (
Searching...→Filtering...→Synthesizing...) membuat pengguna tetap engaged.- Token Economy
- Hanya kirim
Title+Abstract+Yearke Gemini, menghemat 70% token vs mengirim full paper data.- Anti-Prompt Injection
- System prompt melarang Gemini mengikuti instruksi dari user yang mencoba override.
- Graceful Degradation
- Jika Gemini gagal → tetap return referensi tanpa synthesis (user tidak stuck).
- Gibberish Detection (Frontend + Backend)
- Deteksi keyboard mashing sebelum memanggil AI untuk menghemat kuota & mencegah abuse.
- Contextual Q&A
- User pilih 3 papers → tanya "bandingkan metodologi" → AI menjawab HANYA dari abstrak papers yang dipilih.
- Zero UI library template — tidak menggunakan admin dashboard template, landing page template, atau starter kit
- Custom animations — word-flip-in, marquee tracks, number scramble, fade-in with intersection observer
- Design dari scratch — design token system terinspirasi Firecrawl.dev dengan adaptasi untuk konteks akademis
- Data engineering — mengkurasi & membersihkan 3.6M artikel Garuda menjadi 652K yang berkualitas (filter tahun 2024)
graph TD
classDef client fill:#0f766e,stroke:#115e59,stroke-width:2px,color:#fff;
classDef gateway fill:#0d9488,stroke:#0f766e,stroke-width:2px,color:#fff;
classDef service fill:#14b8a6,stroke:#0d9488,stroke-width:2px,color:#fff;
classDef database fill:#2dd4bf,stroke:#14b8a6,stroke-width:2px,color:#000;
classDef ai fill:#8e75b2,stroke:#7c3aed,stroke-width:2px,color:#fff;
classDef deploy fill:#4285f4,stroke:#1a73e8,stroke-width:2px,color:#fff;
%% Client Layer
subgraph Client ["Client Layer (Browser)"]
SPA["React Router (SPA)"]
Store["Zustand (State)"]
Cache["React Query (Cache)"]
Auth["Firebase Auth & Firestore (Sync)"]
end
%% Gateway Layer
subgraph Gateway ["API Gateway (Go Fiber)"]
Security["Security Headers (CSP/HSTS)"]
CORS["CORS (Strict Rules)"]
Limiter["Rate Limiter (15/min)"]
Logging["Logging Middleware"]
end
%% Data Services
subgraph Services ["Data Services & Local DBs"]
OpenAlex["OpenAlex API (200M+ Papers)"]
GoogleBooks["Google Books API"]
SINTA["SINTA Mapper (JSON Dict)"]
Garuda["Garuda SQLite DB (652K+ Docs)"]
end
%% AI Engine
subgraph AIEngine ["AI Engine"]
Gemini["Google Gemini 3.1 Flash Lite"]
end
%% Deployment
subgraph ProdDeployment ["Deployment"]
Docker["Docker Multi-Stage Build"]
CloudRun["Google Cloud Run (HTTPS)"]
end
%% Relationships
SPA -->|HTTPS POST/GET JSON| Gateway
Gateway -->|Concurrent API Calls| OpenAlex
Gateway -->|Concurrent API Calls| GoogleBooks
Gateway -->|Local Mapping| SINTA
Gateway -->|SQLite FTS Search| Garuda
Gateway -->|Prompt Synthesis / Q&A| Gemini
Docker -->|Deploy Container| CloudRun
class SPA,Store,Cache,Auth client;
class Security,CORS,Limiter,Logging gateway;
class OpenAlex,GoogleBooks,SINTA,Garuda service;
class Gemini ai;
class Docker,CloudRun deploy;
sequenceDiagram
autonumber
actor User
participant FE as Frontend (React)
participant BE as Backend (Go Fiber)
participant API as External APIs (OpenAlex/Books)
participant DB as Local Data (SINTA/Garuda DB)
participant AI as Gemini AI
User->>FE: Types query & clicks Search
Note over FE: 1. Gibberish detection (client-side)<br/>2. Keyword extraction & sanitization<br/>3. Autocomplete fetch
FE->>BE: POST /api/v1/research
Note over FE: Phase 1: "Searching OpenAlex..."
Note over BE: Input validation & routing
par Fetch Global
BE->>API: Query OpenAlex / Google Books
API-->>BE: Return papers metadata
and Fetch Local
BE->>DB: Query Garuda SQLite / SINTA JSON
DB-->>BE: Return local articles
end
Note over FE: Phase 2 (1.5s): "Filtering & mapping SINTA..."
BE->>BE: SINTA tier mapping (match publisher -> tier 1-6)
Note over FE: Phase 3 (3.5s): "Synthesizing with Gemini AI..."
BE->>AI: Send sanitized abstracts (Title, Abstract, Year)
AI-->>BE: Return structured summary/synthesis
BE-->>FE: Return unified JSON response
Note over FE: 1. Render AI synthesis (Markdown -> HTML)<br/>2. Render reference cards with badges<br/>3. Enable interaction (filter, export, Q&A)
| Layer | Teknologi | Keunggulan Performa |
|---|---|---|
| Bundler | Vite 8 (ESBuild) | 10-100x lebih cepat dari Webpack. HMR <50ms |
| Routing | React Router (SPA) | Navigasi antar halaman = 0ms (swap komponen di memori) |
| State | Zustand | ~1KB, no boilerplate, selective re-render |
| Cache | React Query (staleTime: 5min) | Data di-cache — navigasi bolak-balik tanpa re-fetch |
| Backend | Go Fiber | Zero allocation HTTP, response <5ms untuk logic lokal |
| Concurrency | Go Goroutines | Handle 100K+ concurrent requests (vs Node.js single-thread) |
| Cold Start | Alpine binary ~50MB | Cloud Run cold start <200ms (vs Node.js 500-2000ms) |
| AI | Gemini Flash Lite | Model tercepat Google — optimized untuk low-latency inference |
| Fitur | Deskripsi |
|---|---|
| 🔍 Multi-Source Search | Satu query → OpenAlex (200M+ papers) + Google Books + SINTA (~700 journals) + Garuda (652K articles) |
| 🇮🇩 SINTA Auto-Mapping | Pemetaan otomatis tier jurnal Indonesia (SINTA 1-6) — fitur unik yang tidak dimiliki platform lain |
| 🤖 AI Synthesis | Google Gemini 3.1 Flash Lite menghasilkan ringkasan literatur terstruktur dalam <5 detik |
| 💬 Dual AI Mode | Search Mode (cari referensi baru) + Ask Mode (Q&A tentang referensi terpilih) |
| 📂 PDF, BibTeX & CSV Export | Ekspor referensi ke PDF, BibTeX (.bib) untuk LaTeX/Zotero, serta Matriks Literatur otomatis ke Excel/CSV |
| 📚 Multi-Library Folder | Simpan referensi ke beberapa folder pustaka kustom, disinkronkan via Firebase secara real-time |
| 🔗 Shareable Link & Fork | Bagikan workspace sesi riset atau folder pustaka publik via tautan unik, tamu bisa menduplikasi (fork) |
| 🎨 Dark Mode + i18n | Tema gelap/terang + bilingual penuh (ID/EN) |
| 🔒 Anti-Hallucination | Temperature 0.3, strict prompt, AI hanya menjawab dari data yang diberikan |
| 🛡️ Security-First | Rate limiting, CORS strict, CSP headers, DOMPurify, gibberish detection |
| ⚡ Narrative Loader | 3-phase animated loading yang membuat pengguna tetap engaged saat menunggu |
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript 6, Vite 8 |
| Styling | Tailwind CSS 4.3, Custom Design Token System |
| UI Components | Lucide React, Glassmorphism, Custom Animations |
| State Management | Zustand 5 (global state), TanStack React Query 5 (server cache) |
| Authentication | Firebase Auth 12 (Google, Microsoft, Email) |
| Cloud Storage | Firebase Firestore (history & bookmark sync) |
| PDF & Export | jsPDF 4.2, JSZip 3.10, BibTeX generator |
| Markdown Rendering | Marked 18 + DOMPurify 3 (XSS-safe) |
| Backend API | Golang 1.25, Fiber (REST API berkinerja tinggi) |
| AI Engine | Google Gemini 3.1 Flash Lite (temperature 0.3) |
| Data Sources (Global) | OpenAlex API (200M+ publications), Google Books API |
| Data Sources (Lokal) | SINTA JSON (~700 jurnal, tier 1-6), Garuda SQLite (652K+ artikel) |
| Deployment | Docker Multi-Stage, Google Cloud Run, Alpine 3.19 |
| Security | CORS strict, Rate Limiting 15/min, CSP Headers, HSTS |
| Package | Version | Role |
|---|---|---|
react |
19.2.6 | UI library |
react-dom |
19.2.6 | DOM rendering |
react-router-dom |
7.15.1 | Client-side SPA routing |
typescript |
6.0.2 | Type safety |
vite |
8.0.16 | Build tool & dev server |
@vitejs/plugin-react |
6.0.1 | React Fast Refresh |
tailwindcss |
4.3.0 | Utility-first CSS |
zustand |
5.0.13 | Lightweight state management |
@tanstack/react-query |
5.100.14 | Server state & caching |
firebase |
12.14.0 | Auth + Firestore |
axios |
1.16.1 | HTTP client |
lucide-react |
1.16.0 | Icon library |
marked |
18.0.4 | Markdown parser |
dompurify |
3.4.11 | XSS sanitization |
jspdf |
4.2.1 | PDF generation |
jszip |
3.10.1 | ZIP packaging |
go |
1.25 | Backend language |
gofiber/fiber |
v2 | HTTP framework |
gofiber/limiter |
v2 | Rate limiting middleware |
gofiber/cors |
v2 | CORS middleware |
joho/godotenv |
latest | Environment loader |
- Node.js 20+
- Go 1.22+
- Google AI Studio API Key (Gemini)
- Google Books API Key (optional)
cd frontend
npm install
npm run devFrontend berjalan di http://localhost:5173
cd backend
cp .env.example .env
# Edit .env → tambahkan GEMINI_API_KEY dan GOOGLE_BOOKS_API_KEY
go mod tidy
go run ./cmd/apiBackend berjalan di http://localhost:8080
docker build -t fuenzer-research .
docker run -p 8080:8080 \
-e GEMINI_API_KEY=your_key \
-e GOOGLE_BOOKS_API_KEY=your_books_key \
-e ENV=production \
fuenzer-research/fuenzer-research
├── /frontend # React SPA (Vite + TypeScript + Tailwind CSS 4)
│ ├── /public # Static assets (favicon, OG image, logos)
│ ├── /src
│ │ ├── /assets # Logo images (SINTA, Garuda, Scopus, etc.)
│ │ ├── /components
│ │ │ ├── /home # Landing page components (HeroBackground, etc.)
│ │ │ ├── /playground # Playground-specific (AIAssistantPanel)
│ │ │ └── /shared # Reusable (Navbar, Footer, JournalCard, CookieConsent, etc.)
│ │ ├── /hooks # Custom React hooks (useSEO, etc.)
│ │ ├── /lib # Firebase config, Firestore helpers
│ │ ├── /locales # i18n translations (en.ts, id.ts)
│ │ ├── /pages # Route pages
│ │ │ ├── /auth # Authentication pages (Login, SignUp, VerifyEmail, ResetPassword)
│ │ │ ├── LandingPage.tsx
│ │ │ ├── PlaygroundPage.tsx
│ │ │ ├── LibraryPage.tsx
│ │ │ ├── CitationsPage.tsx
│ │ │ ├── TermsPage.tsx
│ │ │ ├── PrivacyPage.tsx
│ │ │ └── NotFoundPage.tsx
│ │ ├── /services # API client (axios → backend)
│ │ ├── /store # Zustand stores (research, auth, UI)
│ │ ├── /types # TypeScript interfaces
│ │ ├── /utils # Helpers (PDF export, keyword extractor)
│ │ ├── App.tsx # Root component + React Router
│ │ └── main.tsx # Entry point
│ ├── package.json
│ └── vite.config.ts
├── /backend # Go Fiber REST API
│ ├── /cmd/api/main.go # Entry point — server setup + middleware
│ ├── /internal
│ │ ├── /config # Environment variables loader
│ │ ├── /handlers # HTTP route handlers (research, ask, autocomplete)
│ │ ├── /models # Go structs (request/response types)
│ │ └── /services
│ │ ├── /gemini # Google Gemini AI SDK integration
│ │ ├── /openalex # OpenAlex API client (works, sources, autocomplete)
│ │ ├── /googlebooks # Google Books API client
│ │ ├── /garuda # Garuda SQLite local database client
│ │ └── /sinta # SINTA tier dictionary mapper
│ └── /data # Static data (sinta_journals_data.json, garuda.db)
├── /docs # Architecture docs, design guidelines, progress log
├── Dockerfile # Multi-stage production build
├── DESIGN.md # Visual design system specification
├── AGENTS.md # AI coding assistant configuration
└── README.md # This file
| Layer | Implementasi |
|---|---|
| CORS | Strict whitelist: hanya localhost:5173 dan research.fuenzer.web.id |
| Rate Limiting | 15 req/menit (global), 3 req/5 menit (Auth) untuk mencegah email bombing |
| Security Headers | HSTS, X-Frame-Options, CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy |
| Input Validation | Query 3-200 karakter, scope validation, type validation |
| Email Security | Validasi Regex RFC 5322, sanitasi CRLF (Header Injection Prevention), log sistem tanpa PII |
| Gibberish Detection | Dual-layer: frontend (vowel check + keyboard mash) + backend (pattern matching) |
| XSS Prevention | DOMPurify untuk sanitasi output Markdown dari AI |
| SQLi Prevention | Parameterized queries pada semua eksekusi database SQLite Garuda |
| Anti-Prompt Injection | System prompt dengan instruksi eksplisit untuk menolak override attempts |
| Secret Management | API keys di backend, file .env di-ignore eksplisit di frontend & root .gitignore |
| Auth | Firebase Auth (Google + Microsoft + Email) + anonymous session fallback |
Dilindungi di bawah lisensi Apache 2.0.
Made with 🧠 + ☕ for JuaraVibeCoding Season 1 by Google
Fuenzer Research — Accelerating Indonesian Academic Discovery with AI
