quantlab-feature-implementation

star 0

Gunakan skill ini saat mengimplementasikan fitur baru end-to-end di QuantLab — dari requirements, desain, backend engine, endpoint, frontend component, testing, sampai dokumentasi update. Panduan untuk fitur vertical slice yang complete.

dedy45 By dedy45 schedule Updated 2/27/2026

name: quantlab-feature-implementation description: Gunakan skill ini saat mengimplementasikan fitur baru end-to-end di QuantLab — dari requirements, desain, backend engine, endpoint, frontend component, testing, sampai dokumentasi update. Panduan untuk fitur vertical slice yang complete.

QuantLab Feature Implementation Skill

Skill ini memandu agent dalam implementasi fitur end-to-end di QuantLab — dari analysis requirements sampai kode terintegrasi, tested, dan terdokumentasi.


🎯 Kapan Skill Ini Diaktifkan

Aktifkan OTOMATIS jika:

  • User minta "implement fitur X" (sesuatu yang baru)
  • User minta "buat halaman Y dengan data dari backend"
  • User minta "tambah metric/indicator baru ke dashboard"
  • User minta "integrasikan engine Z ke frontend"
  • Ada request yang span backend + frontend sekaligus

🏗️ Framework Implementasi: Vertical Slice

QuantLab menggunakan Vertical Slice — setiap fitur harus complete dari backend ke frontend sebelum lanjut ke fitur berikutnya. Jangan implementasi horizontal (semua backend dulu, lalu semua frontend).

✅ BENAR: Fitur A (backend + frontend) → Fitur B (backend + frontend)
❌ SALAH: Semua backend → Semua frontend

📋 Phase Implementasi Standard

Phase 0: Requirements Analysis (WAJIB PERTAMA)

Sebelum tulis satu baris kode, jawab:

1. Apa user story-nya?
   "Sebagai [user], saya ingin [action], sehingga [benefit]"
   
2. Apa data yang dibutuhkan?
   - Input: apa yang masuk ke sistem?
   - Output: apa yang ditampilkan ke user?
   
3. Apakah butuh computation baru?
   - Jika ya → perlu engine module baru
   - Jika tidak → pakai engine yang ada
   
4. Apakah butuh data baru dari luar?
   - Endpoint baru ke Binance/external?
   - Upload dari user?
   
5. Apa success criteria-nya?
   - Bagaimana kita tahu fitur sudah done?
   - Apa yang bisa ditest?

Phase 1: Backend Engine (jika perlu komputasi baru)

[ ] Buat engine/new_feature.rs
[ ] Fungsi pure computation (no I/O)
[ ] Input/output types yang jelas
[ ] Min 3 unit tests (happy path, edge case, boundary)
[ ] Benchmark < target latency
[ ] cargo test engine::new_feature::tests → PASS

Phase 2: Service & Endpoint

[ ] Buat atau update services/new_service.rs
[ ] Tambah route di routes.rs (atau sub-module)
[ ] Tambah model struct di models.rs
[ ] Response menggunakan ApiResponse<T>
[ ] Error handling dengan AppError
[ ] Register route di main.rs
[ ] cargo check → 0 errors
[ ] Test endpoint: curl http://localhost:8080/v1/new-endpoint

Phase 3: Frontend API Client

[ ] Tambah type interface ke lib/api.ts
[ ] Tambah fetch function ke lib/api.ts
[ ] Tambah SWR cache jika perlu
[ ] Test fetch di browser console

Phase 4: Frontend Component

[ ] Buat Svelte component baru atau update existing
[ ] Loading state
[ ] Error state + retry button
[ ] Empty state
[ ] Real data dari API (bukan mock!)
[ ] Responsive mobile
[ ] npm run build → 0 errors

Phase 5: Integration & Page

[ ] Integrasikan component ke page (.astro)
[ ] Hydration strategy yang tepat (client:idle/load/visible)
[ ] Navigasi sidebar jika perlu (Sidebar.svelte)
[ ] E2E test dengan Playwright
[ ] Test di semua browser (Chromium, Firefox, Mobile)

Phase 6: Documentation Update

[ ] Update 00FRAMEWORK.md (jika ada perubahan arsitektur)
[ ] Update TASK_BOARD.md (mark task DONE)
[ ] Update CHANGELOG.md (tambah entry)
[ ] Update inventory endpoint di 00FRAMEWORK.md
[ ] Update QUICK_STATUS jika stage berubah

📝 Template: Implementasi Fitur Baru

Template Rencana (tulis ini dulu sebelum koding)

# Feature: [Nama Fitur]

## User Story
Sebagai [trader/analyst/developer], saya ingin [action], 
sehingga [benefit].

## Data Flow
Input:  [apa yang masuk]
Process: [computation yang terjadi]
Output: [apa yang ditampilkan]

## Files yang Akan Dibuat/Dimodifikasi
BACKEND:
- [ ] engine/[name].rs     ← computation baru
- [ ] services/[name].rs   ← service baru
- [ ] routes.rs            ← endpoint baru
- [ ] models.rs            ← tipe baru

FRONTEND:
- [ ] lib/api.ts           ← fetch function
- [ ] components/[name].svelte ← UI component
- [ ] pages/app/[name].astro   ← page baru (jika perlu)

DOCS:
- [ ] TASK_BOARD.md
- [ ] CHANGELOG.md
- [ ] 00FRAMEWORK.md

## API Contract
GET /v1/[endpoint]/{param}
Response: {
  success: bool,
  data: {
    [field]: [type],  // deskripsi
  },
  meta: { computation_time_ms, cache_hit, model_version }
}

## Success Criteria
[ ] curl endpoint → 200 dengan data valid
[ ] Component tampil dengan data real (bukan mock)
[ ] Loading/error/empty state bekerja
[ ] npm run build → 0 errors
[ ] playwright test → PASS
[ ] cargo test → PASS

🧩 Contoh: Implementasi Fitur "Hurst Dashboard Card"

Phase 0: Requirements

User Story: Sebagai trader, saya ingin melihat Hurst Exponent 
untuk asset yang saya pilih, sehingga saya tahu apakah pasar 
sedang trending atau mean-reverting.

Data Flow:
Input:  asset (BTCUSDT), timeframe (D1)
Process: Hurst R/S Analysis dari close prices
Output: { value: 0.67, confidence: [0.61, 0.73], regime: "trending" }

API Contract:
GET /v1/regime/current/BTCUSDT/D1
→ sudah ada! pakai hurst field dari RegimeState

Files:
- [ ] components/dashboard/HurstCard.svelte  (BARU)
- [ ] pages/app/index.astro                  (modifikasi)

Phase 1: Engine (sudah ada)

engine/hurst.rscompute_hurst_exponent() → sudah selesai!

Phase 2: Endpoint (sudah ada)

GET /v1/regime/current/{asset}/{tf} → sudah include hurst field!

Phase 3: Frontend Type (dari existing)

// Sudah ada di api.ts sebagai bagian RegimeState
export interface RegimeState {
  // ...
  hurst: {
    value: number;
    confidence: [number, number];
    regime: string;  // "trending" | "mean_reverting" | "random"
  };
}

Phase 4: Component Baru

<!-- components/dashboard/HurstCard.svelte -->
<script lang="ts">
  import { fetchRegimeCurrent } from '@/lib/api';

  interface Props {
    asset?: string;
    timeframe?: string;
  }
  let { asset = 'BTCUSDT', timeframe = 'D1' }: Props = $props();
  
  let hurstData = $state<{ value: number; confidence: [number, number]; regime: string } | null>(null);
  let loading = $state(true);
  let error = $state<string | null>(null);
  
  $effect(() => {
    loading = true;
    fetchRegimeCurrent(asset, timeframe)
      .then(r => hurstData = r.hurst)
      .catch(e => error = e.message)
      .finally(() => loading = false);
  });
  
  // Computed: warna berdasarkan regime
  let hurstColor = $derived(
    hurstData?.regime === 'trending' ? 'var(--regime-trending-up)' :
    hurstData?.regime === 'mean_reverting' ? 'var(--regime-trending-down)' :
    'var(--color-muted)'
  );
</script>

{#if loading}
  <div class="card skeleton"></div>
{:else if error}
  <div class="card error">⚠️ {error}</div>
{:else if hurstData}
  <div class="card">
    <h4>Hurst Exponent</h4>
    <p class="value" style="color: {hurstColor}">
      {hurstData.value.toFixed(3)}
    </p>
    <p class="regime">{hurstData.regime}</p>
    <p class="confidence">
      CI: [{hurstData.confidence[0].toFixed(2)}, {hurstData.confidence[1].toFixed(2)}]
    </p>
  </div>
{/if}

<style>
  .card {
    background: var(--color-surface);
    border-radius: var(--radius-lg);
    padding: 1.5rem;
    border: 1px solid var(--color-border);
  }
  .value {
    font-size: 2.5rem;
    font-family: 'Roboto Mono', monospace;
    font-weight: 700;
  }
  .skeleton { 
    height: 160px;
    background: linear-gradient(90deg, var(--color-border) 25%, var(--color-surface) 50%, var(--color-border) 75%);
    background-size: 200% 100%;
    animation: shimmer 1.5s infinite;
  }
  @keyframes shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
  }
</style>

⚡ Priority Decision Framework

Saat ada banyak fitur yang bisa diimplementasikan, prioritaskan berdasarkan:

P0 (Implement SEKARANG):
- Fitur yang user tidak bisa pakai produk tanpanya
- Bug yang break core functionality
- Security vulnerabilities

P1 (Implement SEGERA):
- Fitur yang improve experience secara signifikan
- Performance improvements yang terukur
- Fitur yang block P0 fitur lain

P2 (Implement NANTI):
- Nice-to-have improvements
- Experimental features
- Optimizations

Contoh saat ini:
P0: Deploy frontend, Supabase DB setup, SSL/HTTPS
P1: routes.rs refactor, trade cache per-user
P2: ONNX integration, ArcticDB

🔄 Mock → Real API Migration Pattern

Banyak komponen QuantLab masih punya sisa mock data. Pattern migrasi:

<!-- SEBELUM (mock) ❌ -->
<script>
  const MOCK_DATA = { value: 0.67, regime: "trending" };
  let data = MOCK_DATA;
</script>

<!-- SESUDAH (real API) ✅ -->
<script>
  import { fetchRegimeCurrent } from '@/lib/api';
  
  let data = $state(null);
  let loading = $state(true);
  
  $effect(() => {
    fetchRegimeCurrent('BTCUSDT', 'D1')
      .then(r => data = r.hurst)
      .catch(console.error)
      .finally(() => loading = false);
  });
</script>

📊 Fitur Backlog (Berdasarkan Analisis Project)

Fitur yang sudah teridentifikasi dan perlu diimplementasi:

Sudah Ada Engine, Belum Ada UI

Fitur Engine Endpoint Frontend Priority
Walk-Forward Results walk_forward.rs ❌ TODO ❌ TODO P2
Parameter Sensitivity param_sensitivity.rs ❌ TODO ❌ TODO P2
AI Summary ai_summary.rs ❌ TODO ❌ TODO P2
Portfolio Analytics portfolio_service.rs ⚠️ Partial ⚠️ Stub P1

Perlu Engine Baru

Fitur Notes Priority
Transition Matrix engine/transition.rs P2
ONNX ML Inference ort crate sudah di Cargo.toml P2
Real-time Signal Alerts Perlu push notification P2

Missing dari Sidebar tapi Sudah Ada Page

Page Status
/app/portfolio Page ada, data belum wired
/app/risk Page ada, data parsial
/app/signals Page stub
/app/strategies Page stub
/app/backtesting Page stub
/app/orders Page stub

✅ Definition of Done (DoD)

Sebuah fitur dianggap DONE jika:

BACKEND:
✅ cargo test → PASS (termasuk test untuk fitur baru)
✅ cargo clippy -- -D warnings → 0 warnings
✅ curl endpoint → 200 dengan data struktur yang benar
✅ Error handling: 400 untuk bad input, 500 tidak leak internals

FRONTEND:
✅ npm run build → 0 errors
✅ Component render dengan data real dari API
✅ Loading state → Error state → Empty state → Data state, semua bekerja
✅ playwright test → PASS
✅ Mobile responsive 375px

DOCUMENTATION:
✅ TASK_BOARD.md diupdate (task marked DONE)
✅ CHANGELOG.md diupdate dengan entry baru
✅ 00FRAMEWORK.md diupdate jika perlu
Install via CLI
npx skills add https://github.com/dedy45/QuantLab --skill quantlab-feature-implementation
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator