agent guide · DevMeme field guide
Find a Programming Meme with a Browser
Direct answer
Open https://devme.me/?q={encoded query} in a browser that executes JavaScript. Wait for the search-driven gallery update, inspect the visible result links, and open the selected canonical /meme/{slug} page before extracting context or attribution.
Capability and version
Web UI v1 — JavaScript browser required
Supported surface
This guide covers public DevMeme HTML, the search state stored in ?q=, canonical meme pages, category and tag pages, /rss.xml, and /sitemap.xml. The internal JSON route is not a public API.
Authentication
Public search and public meme pages do not require authentication. Do not sign in solely to discover or cite a meme. Account-bound profile and sync surfaces are separate from this workflow.
Prerequisites
- A real browser context with JavaScript enabled.
- A desktop user agent when the workflow depends on the selectors below.
- One concise query derived from the user’s tool, error, phrase, language, or work situation.
Steps
- Encode the shortest useful clue: a tool, error, phrase, language, or work situation.
- Open the public gallery in a desktop browser context.
- Observe the result grid, then enter the query into
#search-input. - Wait for the grid’s child list to change and for the address bar to contain the same
qvalue. - Read visible anchors under
#meme-gridwhose paths begin with/meme/. - Open the selected result and retain its canonical URL, title, visible explanation, source link when present, and relevant categories or tags.
A mobile browser user agent can be redirected to compact Discover with the same query. Use a desktop context when your automation depends on the selectors in this contract.
Copyable example
await page.goto('https://devme.me/', {
waitUntil: 'domcontentloaded',
});
const input = page.locator('#search-input');
const gridChanged = page.evaluate(() => new Promise((resolve, reject) => {
const grid = document.querySelector('#meme-grid');
if (!grid) return reject(new Error('DevMeme result grid was not found'));
const observer = new MutationObserver(() => {
observer.disconnect();
resolve(true);
});
observer.observe(grid, { childList: true });
}));
await input.fill('docker');
await gridChanged;
await page.waitForFunction(() => (
new URL(location.href).searchParams.get('q') === 'docker'
));
const firstResult = page.locator('#meme-grid a[href^="/meme/"]').first();
await firstResult.waitFor();
const canonicalPath = await firstResult.getAttribute('href');
The example uses the browser-visible interface. Do not replace it with a direct call to an internal /api/ route.
URL and response contract
- Search state:
/?q={URL-encoded text}. - Search field:
#search-input. - Result container:
#meme-grid. - Stable selected item:
/meme/{slug}. - Search URLs are not sitemap entries or canonical citation targets.
- The first HTML response contains the default gallery; query-specific cards are a client-side state.
For a known canonical example, open Ancient Debugging Wisdom from Confucius.
Expected result
The browser shows query-specific meme cards, the address bar contains ?q=docker, and the selected card exposes a relative /meme/{slug} link that resolves to one canonical public meme page.
Limits, caching, retries, and errors
Query pages are utility requests and are not eligible for the shared anonymous HTML cache. Results can change with the catalog and search settings. If the document or search service returns 503, retry with bounded backoff rather than treating the default or an empty grid as a valid answer.
Use RSS discovery when the job is to monitor a fixed recent window rather than answer a keyword query. Use categories or tags when a stable topic directory is more appropriate than ranked search.
Attribution rules
Use the canonical meme URL and its visible title. Preserve a visible original-source link when the page provides one, and do not state that DevMeme owns a third-party image merely because the page is indexed there.
Related resources
- How to Search Programming MemesUse DevMeme search, understand its URL and browser state, refine the visible gallery, and troubleshoot common result issues.
- Browse Programming Memes by Category and TagUse DevMeme categories for broad engineering areas and tags for specific tools, errors, languages, and recurring themes.
- How to Save Programming MemesSave a DevMeme item in your browser, find it in the Saved profile collection, and understand when account sync applies.
- Discover New Programming Memes with RSSRead DevMeme's unauthenticated RSS 2.0 feed, handle its 50-item index order and cache headers, and retry truthful 503 failures.
Sources
- DevMeme public gallery and search official-product · checked 2026-07-16
- DevMeme committed sitemap official-product · checked 2026-07-16
- DevMeme RSS feed official-product · checked 2026-07-16
Real reader questions
- Can an agent use the search URL without a JavaScript browser?
- Not for query-specific results. A plain HTTP fetch receives the server-rendered default gallery; JavaScript reads q and updates the cards after load.
- Is /api/memes a supported public agent API?
- No. It is an internal application route without a frozen public DTO, CORS contract, rate-limit policy, or version guarantee. Use the public browser workflow, canonical pages, RSS, or sitemap.
- Which URL should an agent retain after choosing a result?
- Retain the canonical /meme/{slug} URL from the visible result link. The /?q= URL records a search task, not the stable identity of the selected meme.
- How should an agent detect that the gallery has updated?
- Observe a child-list change in #meme-grid, confirm that the address bar contains the requested q value, and then read the visible /meme/ links.
- Does DevMeme search order stay fixed?
- No. Results depend on the current index and the browser's relevance, newest, or oldest setting. Treat order as a discovery aid rather than a durable ranking.