Making everyone prefer you.
Preffer is a hackathon project (2fast2mcp) that gives anyone a professional page plus an AI representative that talks to visitors, answers questions, captures intent, and turns conversations into business outcomes. Instead of building only for founders or SaaS builders, preffer is built for everyone who wants to be more productive and grow their business with AI.
Live: https://preffer.me
Most AI tools today are optimized for developers and founders. preffer is for anyone: creators, freelancers, local businesses, students, and non-technical builders who still deserve leverage. The idea is simple: let people build a clean public page, then put a smart AI representative on it that handles the repetitive conversations and captures value automatically.
- Portfolio creation wizard with conversational AI and approval flow
- Public portfolio pages with flexible sections and multiple themes
- AI representative that chats with visitors on each portfolio
- AI capabilities that detect intent and capture structured data:
- Lead capture
- Appointment requests
- Order/quote requests
- Support escalation
- FAQ unknown escalation
- Follow-up requests
- Feedback and reviews
- Owner workspace: chat to update portfolio content or AI manager behavior
- Analytics for views, sessions, messages, and AI insights
- MCP server for Archestra and other MCP clients to manage portfolios
- Frontend: Next.js app for landing, dashboard, wizard, analytics, and public pages.
- Backend: Express API + PostgreSQL for auth, portfolios, AI chat, analytics.
- AI: Google Gemini with model fallback and optional Archestra LLM proxy.
- Archestra: agent creation/sync, A2A chat routing, MCP tooling, and optional outgoing emails.
preffer uses Archestra in three distinct ways:
-
LLM Proxy
- In development, Gemini calls are routed through Archestra’s LLM proxy for monitoring, safety, and cost tracking.
- Configured via
ARCHESTRA_LLM_PROXY_URLandARCHESTRA_PROFILE_ID. - In production, calls go directly to Gemini.
-
Agent Management + A2A Chat
- Each portfolio’s AI manager maps to an Archestra agent.
- On publish, agents are created or synced.
- Visitor chat is routed through Archestra A2A when an agent is linked, with a fallback to direct Gemini if not.
-
MCP Server
- The backend exposes
/mcpusing MCP’s streamable HTTP transport. - MCP endpoint:
https://app.preffer.me/mcp(hosted) orhttp://localhost:5000/mcp(local). - Auth is
Bearer <user_api_key>. The API key is available in the Credentials page (/user/credentials). - This lets Archestra or any MCP client manage portfolios and AI capabilities as tools.
- The backend exposes
MCP Tools (Exposed)
get_portfolios— list all portfolios for the authenticated user.get_portfolio— get full details for a portfolio by ID.get_portfolio_by_slug— get a published portfolio by slug.create_portfolio— create a new draft portfolio.update_portfolio_info— update core portfolio fields (name, profession, description, etc.).delete_portfolio— delete a portfolio.add_section— add a section to a portfolio.update_section— update an existing section.remove_section— remove a section.get_section_schemas— retrieve section schemas + guidance.recommend_sections— AI-recommend sections based on the description.publish_portfolio— publish a portfolio with a slug.check_slug— check if a slug is available.get_ai_manager— get AI manager configuration.update_ai_manager— update AI manager name/personality/instructions.get_ai_capabilities— list AI capability configuration for a portfolio.update_ai_capabilities— update AI capability configuration.get_credits— get plan + remaining credits.get_themes— list available themes and color schemes.update_theme— update theme and color scheme.get_analytics_overview— overall analytics summary.get_portfolio_analytics— analytics for a specific portfolio.get_top_portfolios— top portfolios by views/engagement.get_visitor_conversations— recent AI manager conversations.get_analytics_insights— AI-driven analytics insights.get_traffic_trends— traffic trends over time.compare_portfolios— compare portfolio performance metrics.
Optional: Outgoing Email
- A follow-up email can be sent via Archestra’s outgoing email endpoint after a lead is captured.
- Implemented in
backend/src/services/archestra-outgoing-email.service.ts. - Currently wired for local dev (
http://localhost:9000) and can be toggled withARCHESTRA_ENABLE_OUTGOING_EMAIL=false.
- Sign in with Google.
- Start the 7-step wizard to create a portfolio.
- Use AI chat to generate or refine each section (approve to save).
- Publish with a slug and optionally enable the AI manager.
- Visitors talk to the AI rep, and the system captures intents.
- Owners view analytics, AI records, and adjust AI behavior.
- Frontend: Next.js 16 (App Router), React 19, Tailwind
- Backend: Node.js, Express, PostgreSQL, Passport (Google OAuth)
- AI: Google Gemini with fallback and optional Archestra proxy
- MCP:
@modelcontextprotocol/sdk
frontend/Next.js appsrc/app/pages (landing, dashboard, wizard, public pages, AI chat)src/components/sections and themes
backend/Express APIsrc/controllers/API controllerssrc/services/AI, portfolio, analytics, Archestra integrationssrc/mcp/MCP server + transportmigrations/andschema.sqlfor PostgreSQL
- Install dependencies
cd backend && pnpm installcd ../frontend && pnpm install
- Configure environment
- Copy
backend/.envand replace secrets with your own values. - Set
FRONTEND_URLandNEXT_PUBLIC_API_URLto match your ports.
- Copy
- Set up the database
cd backend && pnpm db:setup
- Run the apps
- Backend:
cd backend && pnpm dev - Frontend:
cd frontend && pnpm dev
- Backend:
Default ports:
- Backend:
http://localhost:5000 - Frontend:
http://localhost:4000
Backend:
DATABASE_URLGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETJWT_SECRETGEMINI_API_KEYARCHESTRA_LLM_PROXY_URLARCHESTRA_PROFILE_IDARCHESTRA_API_KEYARCHESTRA_A2A_TOKENARCHESTRA_TEAM_IDARCHESTRA_ORG_IDARCHESTRA_LLM_API_KEY_IDARCHESTRA_ENABLE_OUTGOING_EMAIL
Frontend:
NEXT_PUBLIC_API_URL
- Auth:
/api/auth/* - Wizard:
/api/wizard/* - Portfolio:
/api/portfolio/* - Assistant (owner workspace):
/api/assistant/* - Analytics:
/api/analytics/* - MCP:
/mcp(stateless, Bearer API key)
- Outgoing email via Archestra is implemented but set for local-only by default. Adjust the base URL in
backend/src/services/archestra-outgoing-email.service.tsif you want a hosted Archestra instance.