Laravel Specialist
Jeffallan/claude-skills
Builds Laravel 10+ applications with Eloquent models, Sanctum authentication, Horizon queues, API resources and Livewire components, tested with Pest or PHPUnit.
REST API endpoints, route structure, auth guards, request/response contracts, error patterns, and the full API surface for web SPA and mobile clients.
$ npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install OpenLitterMap/openlittermap-web api-endpoints --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.ai/skills/api-endpoints .claude/skills/api-endpoints && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "api-endpoints" agent skill from https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpoints into .claude/skills/api-endpoints/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-endpoints", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpointsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install OpenLitterMap/openlittermap-web api-endpoints --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.ai/skills/api-endpoints .agents/skills/api-endpoints && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "api-endpoints" agent skill from https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpoints into .agents/skills/api-endpoints/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-endpoints", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install OpenLitterMap/openlittermap-web api-endpoints --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.ai/skills/api-endpoints .cursor/skills/api-endpoints && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "api-endpoints" agent skill from https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpoints into .cursor/skills/api-endpoints/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-endpoints", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/OpenLitterMap/openlittermap-web.git --path .ai/skills/api-endpoints--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install OpenLitterMap/openlittermap-web api-endpoints --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.ai/skills/api-endpoints .gemini/skills/api-endpoints && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "api-endpoints" agent skill from https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpoints into .gemini/skills/api-endpoints/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-endpoints", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install OpenLitterMap/openlittermap-web api-endpointsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .github/skills && cp -r skills-src/.ai/skills/api-endpoints .github/skills/api-endpoints && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "api-endpoints" agent skill from https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpoints into .github/skills/api-endpoints/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-endpoints", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install OpenLitterMap/openlittermap-web api-endpoints --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.ai/skills/api-endpoints .opencode/skills/api-endpoints && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "api-endpoints" agent skill from https://github.com/OpenLitterMap/openlittermap-web/tree/master/.ai/skills/api-endpoints into .opencode/skills/api-endpoints/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "api-endpoints", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
api-endpointsREST API endpoints, route structure, auth guards, request/response contracts, error patterns, and the full API surface for web SPA and mobile clients.
API Endpoints is an agent skill from OpenLitterMap/openlittermap-web. REST API endpoints, route structure, auth guards, request/response contracts, error patterns, and the full API surface for web SPA and mobile clients.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering REST APIs. It works with PHP. The repository describes itself as: https://opengeospatialdata.springeropen.com/articles/10.1186/s40965-018-0050-y. The licence is GPL-3.0.
11 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ac688aa. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
API Endpoints loads about 4k tokens when it runs. Until then it costs about 41 tokens; SKILL.md has 1,083 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from OpenLitterMap/openlittermap-web at commit ac688aa, republished under its GPL-3.0 licence (© OpenLitterMap). 1,083 words, ~4,027 tokens.
.claude/skills/api-endpoints/SKILL.md (or your agent's skills folder).All API routes live in routes/api.php. The API serves two clients: the Vue 3 SPA (session auth) and a mobile app (Bearer token auth). Current version is v3. All legacy v1/v2 endpoints have been removed (2026-03-01).
routes/api.php — All route definitions (~146 active routes)readme/API.md — Comprehensive endpoint documentation with request/response contracts for every endpoint (2080+ lines). READ THIS FIRST before modifying any API endpoint.app/Http/Controllers/Auth/AuthTokenController.php — Mobile token login (Sanctum)app/Http/Controllers/Auth/LoginController.php — SPA session loginapp/Http/Controllers/Auth/RegisterController.php — User registration (both clients)app/Http/Controllers/Uploads/UploadPhotoController.php — v3 upload (web EXIF + mobile explicit coords)app/Http/Controllers/API/Tags/PhotoTagsController.php — v3 tag CRUD (POST add, PUT replace)app/Http/Controllers/API/Tags/GetTagsController.php — Public tag catalogapp/Http/Controllers/User/ProfileController.php — Profile (auth + public)app/Http/Controllers/User/Photos/UsersUploadsController.php — v3 user photos (paginated, filterable)app/Http/Controllers/Leaderboard/LeaderboardController.php — Leaderboard (time-filtered, location-scoped)app/Http/Controllers/Points/PointsController.php — Map points GeoJSONapp/Http/Controllers/Points/PointsStatsController.php — Map viewport statsapp/Http/Controllers/Clusters/ClusterController.php — Map clusters GeoJSON (ETag cached)app/Http/Controllers/Location/LocationController.php — Location hierarchy APIapp/Http/Controllers/Location/TagController.php — Location tag analyticsapp/Http/Controllers/API/TeamsController.php — Team CRUD + membershipapp/Http/Controllers/Teams/TeamPhotosController.php — Team photo management + school approvalapp/Http/Controllers/Teams/TeamsLeaderboardController.php — Teams leaderboardapp/Http/Controllers/Teams/TeamsClusterController.php — Team map clusters/pointsapp/Http/Controllers/API/DeleteAccountController.php — GDPR account deletionapp/Http/Controllers/UsersController.php — Settings, privacy toggles, detailsapp/Http/Controllers/ApiSettingsController.php — Privacy settings (maps/leaderboard/createdby)app/Http/Controllers/Achievements/AchievementsController.php — User achievementsapp/Http/Controllers/API/GlobalStatsController.php — World totals (total_tags, total_images, total_users, new_users_*)app/Http/Controllers/CommunityController.php — Community statsapp/Http/Controllers/Cleanups/ — 4 cleanup controllers (create, list, join, leave)app/Http/Requests/ — Form request validation classes (one per endpoint that needs validation)| Prefix | Middleware | Purpose |
|---|---|---|
/api/v3 | auth:sanctum | Current API (upload, tags, user photos) |
/api (public) | none | Tags catalog, points, stats, locations, clusters, leaderboard |
/api/auth | varies | Login, register, logout, password reset |
/api (auth) | auth:sanctum | Profile, settings, achievements |
/api/teams | auth:sanctum | Team CRUD, photos, approval, leaderboard |
/api/admin | admin | Admin queue, verify, reset |
/api/bbox | can_bbox | Bounding box annotation |
/api/participant | varies | School participant session endpoints |
auth:sanctum routes accept both SPA session cookies and mobile Bearer tokens. The SPA uses POST /api/auth/login (session), mobile uses POST /api/auth/token (Sanctum token).mobile. AuthTokenController creates tokens named mobile and revokes previous mobile tokens on each login (prevents buildup).name = NULL. Ignores any name field in the request. Auto-generates username if omitted (pattern: {adjective}-{noun}-{number}).readme/API.md is the source of truth. Every endpoint's exact request/response contract is documented there. Always consult it before modifying an endpoint.{ "msg": "..." }, others return { "message": "..." }. This is a known legacy issue — match the existing pattern for each controller. UploadPhotoRequest overrides failedValidation() to return { success, error, message, errors } with a typed error code field (no_exif, no_gps, no_datetime, invalid_coordinates, validation_error). Duplicates are no longer a validation error — the controller returns idempotent 200 success with the existing photo_id. Handler::unauthenticated() returns { message: "Unauthenticated." } without an error code (known inconsistency). PhotoTagsRequest uses Laravel's default failedValidation() (no custom error codes). Admin routes (/api/admin/*) require the admin middleware which already wraps auth:sanctum — do not add a redundant auth:sanctum wrapper.is_public = true. All map/points/global/community endpoints use Photo::public() scope or explicit where('is_public', true).locations/location_type keys. Not children/children_type. The {type} parameter accepts country, state, or city.total_tags, total_photos, total_members, created_at, updated_at. Never use old names like total_litter, total_images, tags, photos, contributors.page (not current_page). Frontend normalizes to current_page in pointsHelper.getPaginationData().user_id set to NULL via DB CASCADE). Redis leaderboards and per-user metrics are cleaned up.POST /api/auth/token → { token, user }
// Include on all subsequent requests:
Authorization: Bearer <token>
// Validate token is still valid:
POST /api/validate-token → { message: "valid" }GET /sanctum/csrf-cookie → Sets XSRF-TOKEN cookie
POST /api/auth/login → Sets session cookie, returns { success, user }
GET /api/user/profile/index → Returns user + stats + level + rank
POST /api/auth/logout → Destroys sessionPOST /api/v3/upload → Upload photo (web: EXIF; mobile: explicit lat/lon/date)
Idempotent: a duplicate (user_id+datetime) returns 200
{ success, photo_id: <existing>, already_uploaded: true,
tagged: <bool>, xp_awarded: 0 } — NOT a 422.
On validation failure: { success: false, error: <code>, message, errors }
Error codes: no_exif | no_gps | no_datetime |
invalid_coordinates | validation_error
GET /api/v3/user/photos → List user's photos (paginated, filterable, per_page up to 100)
Response includes `is_public` (boolean) and `school_team` (boolean)
for each photo. Owner sees all photos including private ones.
GET /api/v3/user/photos/stats → Aggregate counts (totalPhotos, totalTags, leftToTag)
POST /api/v3/tags → Add tags to untagged photo (PhotoTagsRequest — default Laravel errors)
PUT /api/v3/tags → Replace all tags on tagged photo (edit mode, accepts empty tags: [])
PATCH /api/v3/photos/{id}/visibility → Toggle is_public for a single photo (owner only, auth:sanctum).
Returns { is_public: bool }. Blocked for school team photos (403).
PhotoObserver marks dirty tiles on change.
POST /api/profile/photos/delete → Delete single photo { "photoid": 123 } (soft delete)GET /api/leaderboard?timeFilter=all-time&locationType=country&locationId=1&page=1
// timeFilter: all-time | today | yesterday | this-month | last-month | this-year | last-year
// locationType: country | state | city (optional)
// locationId: numeric ID (required if locationType set)
// All time filters use MySQL metrics table. Per page hardcoded to 100.
// Public endpoint (no auth required). Optional auth adds currentUserRank.GET /api/teams/photos?team_id=X&status=pending → List photos (with new_tags CLO format)
GET /api/teams/photos/{photo}?team_id=X → Single photo (with new_tags)
GET /api/teams/photos/member-stats?team_id=X → Per-student stats (leader only, safeguarding)
GET /api/teams/photos/map?team_id=X → Map points (up to 5000)
POST /api/teams/photos/approve { photo_ids, team_id } → Approve (fires TagsVerifiedByAdmin)
POST /api/teams/photos/revoke { photo_ids, team_id } → Revoke approval (reverses metrics)
PATCH /api/teams/photos/{photo}/tags { tags: [...] } → Edit tags (CLO format, leader/school_manager)
DELETE /api/teams/photos/{photo}?team_id=X → Delete (reverses metrics first)
# Participant management (auth:sanctum, team leader only)
GET /api/teams/{team}/participants → List slots with photo_count
POST /api/teams/{team}/participants { count: N } → Create slots in bulk
POST /api/teams/{team}/participants/{id}/deactivate → Revoke session
POST /api/teams/{team}/participants/{id}/activate → Re-enable session
POST /api/teams/{team}/participants/{id}/reset-token → Regenerate token (returns new token)
DELETE /api/teams/{team}/participants/{id} → Hard delete slot
# Participant session (public/token auth)
POST /api/participant/session { token: "64-char" } → Validate token, return session info (public)
POST /api/participant/upload → Upload photo (X-Participant-Token header)
POST /api/participant/tags { photo_id, tags } → Tag own photo (X-Participant-Token header)
GET /api/participant/photos → List own photos (X-Participant-Token header)
DELETE /api/participant/photos/{photo} → Delete own pre-approval photoGET /api/user/profile/{id}
// Returns stats, level, rank, achievements, recent locations
// Respects privacy: returns { public: false } if profile is private
// Respects show_name/show_username flagsGET /api/v3/user/photos?tagged=false&per_page=100&page=1&picked_up=true
// tagged: true | false (omit for all)
// picked_up: true | false (omit for all) — filters by photo-level picked_up status
// per_page: 1-100 (default 8)
// Untagged = WHERE summary IS NULL (NOT doesntHave('photoTags'))
// Returns: { photos: [...], pagination: { current_page, last_page, per_page, total }, user }Response includes picked_up (boolean, never null) and remaining (deprecated inverse). Use picked_up. Also includes is_public (boolean) and school_team (boolean) — use these to show visibility state and to gate the per-photo toggle (PATCH /api/v3/photos/{id}/visibility is blocked for school_team = true).
new_tags response shape: Each tag includes category_litter_object_id, litter_object_type_id, quantity, picked_up (bool, cast with fallback to photo-level), category (object or null), object (object or null), extra_tags (array). For loose/extra-tag-only tags, category, object, and category_litter_object_id are null. filename field on photo is a full URL, usable directly as image source.
PUT /api/v3/tags accepts empty tags. ReplacePhotoTagsRequest validates tags as present|array (not required|array|min:1). Sending tags: [] clears all tags from a photo (resets summary, XP, verified to untagged state).
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [lon, lat] },
"properties": { "id": 1, "summary": {...}, "username": "..." }
}
]
}GET /api/clusters?zoom=5&bbox=-180,-90,180,90
// Response includes ETag header
// Client sends If-None-Match on next request
// Returns 304 Not Modified if unchangedreadme/API.md before modifying an endpoint. The full request/response contract is documented there. Changing a response shape without updating the docs breaks the mobile agent.auth:api instead of auth:sanctum. Passport guards (auth:api) are legacy. New routes use auth:sanctum which supports both session and token auth.'tags' instead of 'new_tags' from UsersUploadsController. The frontend reads photo.new_tags for tag counts. Wrong key = broken UI.litter_object_type_id from new_tags response. UsersUploadsController::getNewTags() must include it so the frontend can preserve the type dimension on edit round-trips.readme/API.md when changing an endpoint. The API docs must stay in sync with actual controller behavior.is_public filtering. Any query that returns photo data to unauthenticated users MUST use Photo::public() scope.->value for comparisons: $photo->verified->value >= VerificationStatus::ADMIN_APPROVED->value.geom in API responses. Binary spatial data — keep it in Photo model's $hidden array.doesntHave('photoTags') or WHERE verified = 0 for untagged filter. Use whereNull('summary') — summary is set by GeneratePhotoSummaryService when tags are added, regardless of verification status.msg, others use message. Check the specific controller before asserting response keys in tests.team_id query parameter on team endpoints. Most team endpoints require ?team_id=X — forgetting it returns 422 or wrong team's data.flag field on points responses. GET /api/points/{id} returns a flag field from the user's settings. Mobile clients display this./api/photos/submit, /api/add-tags, /api/v2/*) were removed 2026-03-01. Mobile uses v3 endpoints only.PATCH /api/teams/photos/{photo}/tags uses CLO format (category_litter_object_id), same as POST /api/v3/tags. Not the old { category, object } string format.new_tags in team photo responses. Both index() and show() return new_tags with CLO IDs + extra_tags for the facilitator queue tag editor.remaining instead of picked_up. remaining is deprecated (inverse boolean). Use picked_up (boolean, never null at photo level). Per-tag new_tags[].picked_up is separate and nullable (true/false/null).date field. Backend expects seconds: Carbon::createFromTimestamp((int) $dateInput). JS Date.now() returns milliseconds — divide by 1000.POST /api/profile/photos/delete expects photoid (all lowercase, no underscore). Not photoId or photo_id.© OpenLitterMap, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .ai/skills/api-endpoints of OpenLitterMap/openlittermap-web.
Open the folder on GitHubat commit ac688aa
API Endpoints next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| API Endpoints this skillOpenLitterMap/openlittermap-web | 134 | — | ~4k | Automated safety check: Pass | GPL-3.0 | |
| Laravel SpecialistJeffallan/claude-skills | 12k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| B24phpsdk Maintainerbitrix24/b24phpsdk | 102 | — | ~10k | Automated safety check: Notes | MIT | |
| Helpers And Infra Keeperdiscord-php/DiscordPHP | 1.1k | — | ~2.2k | Automated safety check: Pass | MIT | |
| WooCommerce Store API Routeswoocommerce/woocommerce | 11k | — | ~932 | Automated safety check: Pass | Custom licence | |
| Wordpress Plugin Developmentsickn33/agentic-awesome-skills | 47k | 2 repos | ~339 | Automated safety check: Pass | MIT |
Jeffallan/claude-skills
Builds Laravel 10+ applications with Eloquent models, Sanctum authentication, Horizon queues, API resources and Livewire components, tested with Pest or PHPUnit.
bitrix24/b24phpsdk
A skill your agent uses whenever working with GitHub issues in the bitrix24/b24phpsdk repository: creating new issues, reading existing ones, planning implementation from an issue, referencing an…
discord-php/DiscordPHP
Work with DiscordPHP's infrastructure utilities — CacheWrapper, CacheConfig, BigInt, Multipart, Endpoint::bind URL templates, Collection base class, and domain Exceptions.
woocommerce/woocommerce
Guidelines for adding or changing routes in the WooCommerce Store API under /wc/store/v1, covering authentication, REST design, schemas and variations.
sickn33/agentic-awesome-skills
WordPress plugin development workflow covering plugin architecture, hooks, admin interfaces, REST API, security best practices, and WordPress 7.0 features: Real-Time Collaboration, AI Connectors…
discord-php/DiscordPHP
Maintain Repository classes — REST endpoints, route vars, cache coherence, typed collections, and persistence boundaries.
OpenLitterMap/openlittermap-web
Styles applications using Tailwind CSS v3 utilities. An agent skill from OpenLitterMap/openlittermap-web.
OpenLitterMap/openlittermap-web
OpenLitterMap v5 architecture reference. An agent skill from OpenLitterMap/openlittermap-web.
OpenLitterMap/openlittermap-web
AchievementEngine, AchievementRepository, milestone checkers, AchievementsSeeder, userachievements pivot, AchievementsController API, and achievement evaluation flow.
OpenLitterMap/openlittermap-web
AdminController, photo approval, tag editing, deletion, MetricsService integration, admin middleware, verification queue, and admin XP.
OpenLitterMap/openlittermap-web
ClusteringService, tile keys, dirty tiles/teams, clustering commands, ClusterController GeoJSON API, PhotoObserver dirty marking, and map cluster rendering.
OpenLitterMap/openlittermap-web
LeaderboardController, Redis sorted sets for all-time XP rankings, per-user metrics rows for time-filtered rankings, rewardXpToAdmin, and leaderboard privacy.
Works with
Categories
REST API endpoints, route structure, auth guards, request/response contracts, error patterns, and the full API surface for web SPA and mobile clients. API Endpoints is an agent skill from OpenLitterMap/openlittermap-web. REST API endpoints, route structure, auth guards, request/response contracts, error patterns, and the full API surface for web SPA and mobile clients.
API Endpoints fits situations like: tasks that involve REST APIs.
Run `npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a claude-code`. Or copy the skill folder (.ai/skills/api-endpoints in OpenLitterMap/openlittermap-web) into .claude/skills/api-endpoints in your project. Claude Code loads it when a task matches its description.
Run `npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a codex`. Or copy the skill folder (.ai/skills/api-endpoints in OpenLitterMap/openlittermap-web) into .agents/skills/api-endpoints in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add OpenLitterMap/openlittermap-web --skill api-endpoints -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/api-endpoints, .gemini/skills/api-endpoints, .github/skills/api-endpoints and .opencode/skills/api-endpoints in your project.
SKILL.md names no scripts, command-line tools or credentials: API Endpoints is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
API Endpoints is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with API Endpoints: Laravel Specialist (Jeffallan/claude-skills, 12k stars), B24phpsdk Maintainer (bitrix24/b24phpsdk, 102 stars), Helpers And Infra Keeper (discord-php/DiscordPHP, 1.1k stars) and WooCommerce Store API Routes (woocommerce/woocommerce, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
OpenLitterMap (a GitHub organization) maintains it in OpenLitterMap/openlittermap-web, which has 134 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on September 14, 2026.
Source: OpenLitterMap/openlittermap-web on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.