Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Small Python/uv project for starting a Genymotion virtual Android device in
the cloud using Genymotion's supported gmsaas CLI.
Create an API token in Genymotion SaaS and export it without committing it:
Find the recipe you want to launch:
The device is automatically limited to 60 minutes. Override this and connect
ADB when needed:
You can also invoke the Python script directly through uv:
To avoid passing the recipe each time, set GENYMOTION_RECIPE_UUID.
Run the FastMCP server locally with the default stdio transport:
You can also run it through the FastMCP CLI:README 전문 보기 ↗Small Python/uv project for starting a Genymotion virtual Android device in
the cloud using Genymotion's supported gmsaas CLI.
Install the optional Genymotion tooling:
uv sync --extra genymotion
Create an API token in Genymotion SaaS and export it without committing it:
export GENYMOTION_API_TOKEN="your-token"
Find the recipe you want to launch:
uv run gmsaas recipes list
uv run genymotion-cloud <recipe-uuid>
The device is automatically limited to 60 minutes. Override this and connect ADB when needed:
uv run genymotion-cloud <recipe-uuid> \
--name groceries-test \
--max-run-duration 30 \
--adb-connect
You can also invoke the Python script directly through uv:
uv run scripts/run_genymotion.py <recipe-uuid>
To avoid passing the recipe each time, set GENYMOTION_RECIPE_UUID.
Install the locked project dependencies:
uv sync
Run the FastMCP server locally with the default stdio transport:
cp .env.example .env
# Fill in ANONYMOUS_KEY_SECRET, POSTHOG_PROJECT_TOKEN, and POSTHOG_HOST.
uv run groceries-mcp
You can also run it through the FastMCP CLI:
uv run fastmcp run src/groceriesdeals/mcp_server.py:mcp
For an HTTP server instead, run:
uv run fastmcp run src/groceriesdeals/mcp_server.py:mcp \
--transport http \
--port 8438
The HTTP MCP endpoint is http://localhost:8438/mcp. The v1 server exposes:
list_supermarkets — currently returns Picnic onlyget_current_discounts(supermarket_id, category?) — active deals for a
supermarket (optional Picnic category filter such as fruit)The installed project also provides an HTTP entry point intended for
containers. Its bind address, port, and MCP path can be overridden with
MCP_HOST, MCP_PORT, and MCP_PATH:
uv run groceries-mcp-http
The repository includes a production image, Docker Compose stack, Caddy HTTPS proxy, GHCR publishing workflow, and immutable release script. The MCP server has no database dependency; usage analytics are sent to PostHog.
Follow the complete AWS Lightsail deployment guide.
Connect to the Lightsail instance over SSH:
ssh -i ~/.ssh/LightsailDefaultKey.pem [email protected]
The server writes one-line JSON audit records for every MCP request, response, and error. Request records include:
_meta, including a client-provided client_id when present;Authorization headers, cookies, passwords, secrets, and token-shaped fields are
redacted. The bearer token itself is never logged. v1 is intentionally
unauthenticated so any MCP client can call the deals tools. When ChatGPT sends
openai/subject, it is hashed for PostHog analytics only and is not treated as
proof of identity. Client names, user agents, forwarded headers, and request
_meta are client assertions.
Audit output is emitted to stderr both from the groceries-mcp entry point and
when the server is launched through the FastMCP CLI.
The server sends sanitized PostHog events through the Python server SDK. Normal
MCP operations use mcp message processed; tool calls use the dedicated mcp tool called event so they are visible in Activity. Events include MCP operation
names, safe component names, outcome, duration, client/protocol versions, and
UUIDv7 activity session IDs. Tool calls also include tool_name, bounded
tool_parameters, a UI-friendly tool_parameters_json string, and a canonical
tool_call string combining the name and parameters for breakdowns. Keys that
look like passwords, tokens, secrets, credentials, email addresses, phone
numbers, or private keys are replaced with [REDACTED]. Results, complete
headers, raw metadata, IP addresses, raw openai/subject values, and error
messages are never included.
The server reads openai/subject from request metadata or the ChatGPT
x-openai-subject header when present, HMACs it into a stable PostHog distinct
ID, and rejects conflicting identities within one connection.
ANONYMOUS_KEY_SECRET must remain unchanged across deployments or the same
subject will derive a new ID. Events without either identity source use a
connection-scoped anonymous identity; tool calls work without a subject.
PostHog delivery is best-effort after startup and cannot interrupt MCP traffic.
To analyze usage in PostHog, select mcp tool called, count events for total
calls, count unique users for callers, and break down by tool_name. Break down
by tool_call for exact tool-plus-parameter combinations, or inspect/query
tool_parameters and tool_parameters_json. Filter identity_status = stable_user when anonymous pre-identity traffic should not count as a user.
Start the HTTP server from the repository root:
uv run fastmcp run src/groceriesdeals/mcp_server.py:mcp \
--transport http \
--port 8438
Keep that process running. In another terminal, add its URL to Codex:
codex mcp add groceries-deals --url http://localhost:8438/mcp
Confirm that the server was added:
codex mcp list
Restart Codex after adding the server. In a Codex conversation, use /mcp to
check that groceries-deals is connected and that list_supermarkets /
get_current_discounts are available.
The equivalent entry in ~/.codex/config.toml is:
[mcp_servers."groceries-deals"]
url = "http://localhost:8438/mcp"
The Codex desktop app and IDE extension also provide an MCP servers
settings screen. Choose Streamable HTTP and enter
http://localhost:8438/mcp.
The URL works only while the HTTP server process is running. If Codex should
start and stop the server automatically instead, configure it as a local
stdio server:
codex mcp add groceries-deals -- \
uv --directory "$PWD" run groceries-mcp
To remove the server later:
codex mcp remove groceries-deals
Start the MCP HTTP server and landing site together:
make up
http://localhost:8438/mcphttp://localhost:3438Stop both processes with Ctrl+C.
The marketing landing page is a standalone Next.js app in apps/landing
(kortingzoeker.com), including /privacy, /terms, and /support.
cd apps/landing
npm install
npm run dev
Generate the uploadable plugin ZIP and unpacked package:
make plugin-package
Source metadata and review cases live in submission/. See
submission/README.md.
Important technical decisions are recorded in
docs/adr.