Kunthawat Greethong
8b84378fe1
feat: SaaS foundation for CrowdSight
...
Elevate MiroFish/CrowdSight from single-container dev to a SaaS foundation:
- Local memory backend (Zep-compatible): memory services/models, local graph
builder + updater, AgentActivity seam, import-boundary isolation; Zep stays
default, local is opt-in behind MEMORY_BACKEND. Semantic parity not yet proven.
- Durable product persistence: projects/simulations/reports schema (migration
0007) + tenant/owner-scoped ProductRepository + dual-write + scoped_project
read-first + ArtifactStore abstraction; durable JobQueue + worker.py.
- SaaS hardening: durable RateLimiter (wired to login), UsageService (LLM
accounting), redacted AuditService, idempotency, CORS allowlist, safe API
errors, single-use PasswordResetService + endpoints (covers invite-pending).
- Exactly 3 roles (super_admin/admin/user) with tenant authz policy.
- Admin UI: GET/POST/PATCH /api/admin/users + GET/PUT /api/admin/settings
(super-admin only, encrypted/masked); AdminView.vue + SettingsView.vue with
admin/super-admin route guards, th/en i18n.
- Production deploy topology: multi-stage Dockerfile (frontend build + gunicorn
wsgi + nginx SPA-proxy + supervisord worker), backend/wsgi.py, gunicorn dep.
Backend 197 passed; frontend 10 tests + build green. ruff unavailable (gap).
No commit of credentials; secrets handled via env/.env.example.
Deferred: Zep semantic A/B parity, object storage cutover, mobile QA, EasyPanel
container build of deploy topology.
2026-08-31 13:05:21 +07:00
Kunthawat Greethong
89d04e795b
fix: replace hero logo with inline use cases grid
...
- Remove logo image from hero section
- Move use cases into hero-right as 2x2 grid
- Remove standalone usecases-section
- Update CSS for inline layout
2026-06-27 13:11:29 +07:00
Kunthawat Greethong
3fc96f39dd
fix: wire agent group selection through to simulation start
...
Step 2 -> Step 3 -> Simulation API now passes selected_agent_ids.
Backend filters reddit_profiles.json and twitter_profiles.csv
to only include selected agents before starting simulation.
Flow: Step2 checkboxes -> emit('next-step', {selectedAgentIds}) ->
router query -> Step3 props -> startSimulation API -> filter profiles
2026-06-26 13:48:23 +07:00
Kunthawat Greethong
b7bc09d650
fix: show categorize button BEFORE groups exist
...
The 'จัดกลุ่มอัตโนมัติ' button was hidden inside v-if='agentGroups.length > 0'
— chicken-and-egg problem. Now shows trigger button when profiles exist
but groups don't, and groups section after categorization.
2026-06-26 13:14:16 +07:00
Kunthawat Greethong
d41d865313
Phase 5: Agent grouping and selection after Step 2
...
Backend:
- Add /api/agent-group/categorize endpoint — AI groups agents by role
- Add /api/agent-group/filter endpoint — filter by selected groups
- Groups with default_enabled=false (advertiser, brand) are unchecked
Frontend:
- Add agent groups section in Step2EnvSetup.vue
- 'Auto-categorize' button triggers AI grouping
- Show groups with checkboxes (enabled groups checked, disabled unchecked)
- Auto-remove unchecked agents when proceeding to Step 3
- Show selected count summary
2026-06-26 12:36:03 +07:00
Kunthawat Greethong
dd3db561e5
fix: strengthen entity filtering for ad/business content
...
- Add marketing metadata to 'Not allowed' list in ontology prompt
- Strengthen exclude_self filter instruction
- Add exclude_rules support from template filter rules
- Update business_ad template with more excluded types
2026-06-26 12:19:45 +07:00
Kunthawat Greethong
d5cc005332
fix: revert logo filename reference (file not renamed yet)
2026-06-26 11:47:34 +07:00
Kunthawat Greethong
166ef73ad2
Phase 4: Template system with auto-select and pre-fill
...
Backend:
- Add templates.json with 5 template definitions (news, policy, business, fiction, social)
- Add template API (/api/template/list, /api/template/auto-select, /api/template/:id/filter-rules)
- Register template blueprint in Flask app
Frontend:
- Add template API client (frontend/src/api/template.js)
- Add template selector UI in Home.vue (chip buttons + auto-select button)
- Add template state management and auto-select logic
Locale:
- Add template keys for th/en/zh
Entity filter rules in templates.json for context-aware filtering in Step 1.
2026-06-26 11:44:55 +07:00
Kunthawat Greethong
3c4c2183c7
Phase 3: Redesign homepage + natural Thai text
...
- Add use cases section with 4 scenario cards (news, policy, business, fiction)
- Rewrite Thai home section text to be natural (not translated from Chinese)
- Add use case locale keys for th/en/zh
- Add CSS for use cases grid with hover effects
2026-06-26 11:41:13 +07:00
Kunthawat Greethong
596a75c229
Phase 1+2: Rename CrowdSight + fix Thai vocabulary
...
Phase 1: Rename MiroFish → CrowdSight across all files
- 39 files, 114+ occurrences replaced
- Frontend, backend, locales, config, README, docker-compose
Phase 2: Fix difficult Thai vocabulary
- เมล็ดพันธุ์แห่งความจริง → ข้อมูลตั้งต้น
- สกัดเอนทิตี → ดึงตัวละคร
- ฉีดความจำ → เพิ่มความจำ
- ออนโทโลยี → โครงสร้างข้อมูล
- เอนทิตี → ตัวละคร
- พลวัตกลุ่ม → พฤติกรรมกลุ่ม
- โลกคู่ขนาน → โลกจำลอง
Only string changes, no logic changes.
2026-06-26 10:27:48 +07:00
Kunthawat Greethong
270c92ed05
fix: 3 fixes - camel-ai env var, Thai font, model_config_dict
...
1. Restore OPENAI_API_KEY/OPENAI_BASE_URL env vars for camel-ai factory check
(keep api_key/base_url in model_config_dict for client constructor)
2. Add Thai-supporting font-family to .profile-realname
(JetBrains Mono doesn't render Thai diacritics)
3. Keep model_config_dict with api_key and base_url for camel-ai client
2026-06-22 10:20:44 +07:00
Kunthawat Greethong
7c3e219a6f
fix: CSS syntax error in survey-env-warning placement
2026-06-17 21:58:00 +07:00
Kunthawat Greethong
2bb1afab68
fix: extract actual error message from backend error responses
...
The error interceptor was re-throwing the generic axios Error object
instead of extracting the actual error message from the response body.
Now extracts error.response.data.error for meaningful error messages.
2026-06-17 21:40:21 +07:00
Kunthawat Greethong
5224c6df79
fix: show actual error details in chat error messages
...
- Extract error from err.response.data.error (axios error response)
- Log full error to console for debugging
- Show actual backend error message instead of generic 'Error'
2026-06-17 21:38:19 +07:00
Kunthawat Greethong
55a430db62
fix: show env status warning in survey tab + add alert on survey failure
...
- Add isEnvAlive check on mount via /api/simulation/env-status
- Show warning banner when simulation env is not running
- Add alert() on survey failure for visibility
- Add envNotRunning translation key for th/en/zh
2026-06-17 21:35:08 +07:00
Kunthawat Greethong
fa3160f67e
fix: show visible error alert when survey fails (e.g. simulation env not running)
2026-06-17 19:37:55 +07:00
Kunthawat Greethong
9f2232d40b
feat: support cross-origin deployment with VITE_API_BASE_URL
...
- Set VITE_API_BASE_URL=https://opinion-api.moreminimore.com for
frontend-backend split deployment
- Vite proxy also uses API_BACKEND_URL env var as target
- Falls back to same-origin proxy for local dev
2026-06-17 12:11:22 +07:00
Kunthawat Greethong
aadc11ad83
fix: use relative baseURL so API calls go through vite proxy
...
When deployed behind a reverse proxy (e.g. opinion.moreminimore.com),
hardcoding http://localhost:5001 causes the browser to try connecting
to the user's own machine. Empty baseURL + vite proxy fixes this.
2026-06-17 12:08:04 +07:00
Kunthawat Greethong
cbe861ff27
fix: use allowedHosts=true (boolean), disable open in container
2026-06-17 11:57:24 +07:00
Kunthawat Greethong
26cdd14881
fix: use VITE_ALLOWED_HOSTS env var, default to 'all'
2026-06-17 11:55:56 +07:00
Kunthawat Greethong
0cdcc79125
fix: allow all hosts in vite dev server
2026-06-17 11:47:38 +07:00
Kunthawat Greethong
3ea51d906a
fix: allow opinion.moreminimore.com host in vite config
2026-06-17 11:46:59 +07:00
ghostubborn
223b283da7
fix(security): upgrade axios, rollup, picomatch to fix 3 high severity vulnerabilities
2026-04-02 15:00:33 +08:00
BaiFu
af71244974
Merge pull request #428 from Ghostubborn/feat/i18n
...
feat(i18n): 添加多语言切换功能,支持中英文
2026-04-02 14:27:04 +08:00
ghostubborn
ed465908db
fix(i18n): set HTML lang attribute before Vue mounts via inline script
2026-04-02 14:21:09 +08:00
ghostubborn
65df257e19
chore(deps): upgrade vue-i18n from v9 to v11
2026-04-02 14:20:50 +08:00
ghostubborn
2421010fe1
fix(i18n): fix English workflow desc font size with correct CSS selectors
2026-04-01 19:11:22 +08:00
ghostubborn
3929c3ade2
fix(i18n): further shorten English metrics and improve workflow layout
2026-04-01 19:07:19 +08:00
ghostubborn
21922da6cc
fix(i18n): improve English layout for homepage left-pane and report title
...
- Add sans-serif font for English left-pane (status, workflow sections)
- Shorten English workflow step descriptions
- Reduce English report title font-size from 36px to 28px
2026-04-01 19:04:38 +08:00
ghostubborn
c6cafdd532
fix(i18n): translate world1/world2 platform labels in interview tool display
2026-04-01 18:38:22 +08:00
ghostubborn
5072a2eaa8
feat(i18n): replace Chinese UI text in Step4Report.vue render functions
...
Only UI display text is replaced. Regex parsing patterns are kept as-is
since they match the backend output format.
2026-04-01 18:35:18 +08:00
ghostubborn
6db3f98a48
fix(i18n): fix English homepage layout with proper font and shorter copy
...
- Use sans-serif font for English titles, descriptions and navbar
- Shorten English hero text to avoid overflow
- Fix :global() scoped CSS issue that was setting root font-size to 3.5rem
- Use separate unscoped style block for html[lang] selectors
2026-04-01 18:04:05 +08:00
ghostubborn
1d358fc492
feat(i18n): replace expand/collapse Chinese text in Step4Report.vue
2026-04-01 17:44:45 +08:00
ghostubborn
3a8451c119
feat(i18n): replace remaining hardcoded Chinese in frontend addLog calls
2026-04-01 17:21:55 +08:00
ghostubborn
e1db8bacc2
feat(i18n): replace hardcoded Chinese in frontend addLog() messages
2026-04-01 16:35:35 +08:00
ghostubborn
ffe6369c52
fix(i18n): fix curly quotes in Home.vue and remove unused dark theme from LanguageSwitcher
2026-04-01 16:23:52 +08:00
ghostubborn
fbaa3dbbeb
fix(i18n): fix curly quotes and missing @ alias in vite config
2026-04-01 15:45:43 +08:00
ghostubborn
fc47ae81b5
feat(i18n): replace hardcoded Chinese in frontend components with i18n calls
...
Replace all user-visible hardcoded Chinese strings in 7 component files
with $t() / t() calls using vue-i18n:
- Step1GraphBuild: ontology generation, graph build, status badges
- Step2EnvSetup: simulation setup, agent personas, platform config,
time config, initial activation, modal profile details
- Step3Simulation: report generation button
- Step4Report: section loading text, interaction button
- Step5Interaction: chat interface, survey UI, tool descriptions,
error messages, agent selection
- GraphPanel: graph status hints, loading states, tooltips
- HistoryDatabase: history cards, modal, replay buttons
Added missing translation keys to both zh.json and en.json locale files.
Added useI18n imports to components that need script-level translations.
2026-04-01 15:43:11 +08:00
ghostubborn
70833821a2
feat(i18n): replace hardcoded Chinese in frontend views with i18n calls
2026-04-01 15:36:29 +08:00
ghostubborn
3d5e5d024d
feat(i18n): add language switcher component to navigation
2026-04-01 15:24:58 +08:00
ghostubborn
22bf50f877
feat(i18n): set up vue-i18n with dynamic locale loading
2026-04-01 15:22:14 +08:00
ghostubborn
2ffadd3038
feat(i18n): add Accept-Language header to all API requests
2026-04-01 15:22:07 +08:00
666ghj
7c7c7a2c63
fix(deps): pin axios version to prevent potential supply chain risks
2026-04-01 14:54:33 +08:00
666ghj
a795405428
style(home): add overflow-y property to upload zone and adjust alignment for files
2026-02-22 23:40:40 +08:00
666ghj
ae1f38cdcc
fix(report_agent): improve markdown rendering by cleaning up <br> tags around block-level elements and enhancing list formatting
2026-02-14 18:25:20 +08:00
666ghj
709a0d7023
feat(report_agent): enhance markdown rendering for lists and improve formatting; support nested lists and clean up HTML output
2026-02-14 17:04:04 +08:00
666ghj
7601d78fd4
feat(report_agent): enhance interview text processing and response handling; improve quote extraction and formatting for better clarity
2026-02-14 16:56:48 +08:00
666ghj
f9abaf8e9f
refactor(report_agent, Step4Report): simplify logging and remove subsection handling; update UI to reflect changes in section content generation
2026-02-06 18:13:30 +08:00
666ghj
0b71f89f96
fix(Step2EnvSetup): update expectedTotal only when API returns a valid value to prevent overwriting existing data
2026-01-29 10:58:36 +08:00
666ghj
0efd9352a0
feat(docker): add Docker support with Dockerfile, docker-compose.yml, and .dockerignore; update README for Docker deployment instructions
2026-01-22 14:35:41 +08:00