Skip to main content

Issue Pool Atlas: baking 158 GRE prompts into one static page

Share:XLinkedInHN
Cover for Issue Pool Atlas: baking 158 GRE prompts into one static page

The pool

ETS publishes the full "Pool of Issue Topics" for the GRE Analytical Writing section as a public PDF. Every Issue prompt you might see on the actual test is drawn from that pool of 158 prompts. Nothing is secret. The whole exam-day surprise is which one shows up in your slot.

That is a strange setup once you sit with it. If the entire universe of possible questions is 158, then the highest-yield form of practice is not writing a hundred essays from scratch. It is walking every prompt in the pool, having a shape ready when the timer starts. The pool is small enough to be studied, and boring enough that almost no one does.

I built ache to make that walk mechanical. It is a single static page at ache-ebon.vercel.app that renders one study card per prompt, 158 cards in total, plus a toolbar to filter by theme and prompt type. There is no login, no backend, no API. Everything you see is baked into index.html at build time.

GregMAT paragraph labels

The scaffolding on each card follows the GregMAT template that GRE tutors on YouTube spread over the last few years. It is opinionated on purpose. A five-plus AWA essay does not need to be original in structure. What it needs is a clear thesis, three body paragraphs where each one plays a labelled role, and a conclusion that returns to the claim.

Every card in the atlas renders a four-section draft in that shape (with the third body paragraph reserved for a counter-argument beat inside a single section, not a separate one):

  1. Introduction with a hook, a paraphrase of the prompt, and a thesis.
  2. Body Paragraph 1, first supporting reason with an example and analysis.
  3. Body Paragraph 2, second supporting reason plus a counter-argument beat.
  4. Conclusion that reasserts the thesis and does the "so what" line.

The point is not that every essay should sound the same. It is that a test-taker who has this shape in muscle memory can spend all their thinking on the argument, not on the paragraph order. The template is the road; you still have to drive.

The Python build script

The whole site is built by one file: build_site.py, 2,184 lines. Its only dependency is pypdf.

The pipeline is boring, which is the compliment I mean it as:

flowchart LR
  A[issue-pool.pdf<br/>626 KB] --> B[pypdf extract]
  B --> C[158 raw prompts]
  C --> D[infer_prompt_type]
  D --> E{6 prompt types}
  E --> F[Concept lookup<br/>twelve topical specs<br/>plus four fallbacks]
  E --> G[Keyword bucket fallback<br/>4 buckets]
  F --> H[Template merge<br/>4 sections]
  G --> H
  H --> I[gre-issue-data.json<br/>2.27 MB]
  I --> J[index.html<br/>1.73 MB, baked]

infer_prompt_type() walks each prompt string and buckets it into one of six shapes: claim_reason, two_views, policy, recommendation, claim, or statement. Those are the six moulds ETS actually uses, and each one wants a slightly different opening move. A claim_reason prompt has a claim and a "reason" line; the essay needs to weigh both. A two_views prompt is a debate; the essay needs to pick a side and defend it. A policy prompt wants you to argue whether something should be done. Same conclusion structure, different framing at the top.

Once a prompt is typed, the script looks it up in CONCEPT_LIBRARY, a dictionary of twelve hand-written topical concept specs plus four broader keyword-bucket fallbacks. Each spec covers a family of prompts (education policy, government funding, technology in daily life, the role of the arts, and so on) and carries eight {point, example, analysis} triples, four supporting the prompt's claim and four opposing it. Those are the raw ideas the scaffolding pours into the body paragraphs.

If no topical spec matches, one of the four keyword-bucket fallbacks catches the rest: education_general, government_general, technology_media, and history_culture_arts. The fallbacks are less specific but keep the site honest: every one of the 158 prompts renders a full card, no gaps.

Each rendered essay also carries a stance label (mostly_agree, mostly_disagree, or balanced) so a student can see which way the concept spec leans and consciously argue the other side if they want the practice.

Template vs idea

The nicest trick in the build script is that every essay segment is tagged with a kind field: either "template" or "idea". Template segments are the connective tissue, phrases like "One reason to accept this claim is that", "A common objection is that", "Ultimately, the balance tips toward". Idea segments are the argumentative content, the specific reason, example, and analysis.

The rendered card colour-codes them. Template segments show in a muted ink, idea segments in the accent teal or burnt orange depending on stance. The visual result is that a student looking at a sample essay can see, at a glance, which bones belong to the shape and which flesh belongs to the argument. When it comes time to write their own essay, they can lift the shape and refuse the flesh.

The whole design assumes a student who is willing to memorise a template and unwilling to memorise essays. That was me, in a former life. Nobody gets to a five-plus by regurgitating a canned response, and I did not want the site to encourage that. I wanted the scaffolding visible enough that it stops feeling like cheating and starts feeling like carpentry.

PEST as a brainstorm lens

Every card also has a PEST grid: Political, Economic, Social, Technological. PEST is a strategy-analysis framework that management consultants use to think through the forces acting on a market. It is a slightly ridiculous thing to import into a GRE study tool, and that is exactly why it works.

The AWA Issue section rewards examples across domains. If your essay on "should government fund the arts" only draws on one kind of evidence, it feels thin. PEST forces four different angles: the political dimension (regulation, censorship, national identity), the economic dimension (tourism, jobs, tax revenue), the social dimension (cohesion, access, elitism), and the technological dimension (streaming, AI-generated art, distribution). A student who has walked the pool with PEST in mind has four handles for every prompt instead of one.

The site renders the PEST grid inline on every card, one bullet per quadrant, pre-filled with domain-appropriate ideas from the concept spec. It is a nudge, not a script.

Ship-in-one-commit static sites

The whole site is one commit: 575c27a, "Initial commit", 50,033 insertions across five files. build_site.py, gre-issue-data.json, index.html, issue-pool.pdf, and a .gitattributes to keep line endings sane.

gre-issue-data.json is 2.27 MB. index.html is 1.73 MB. There is no runtime data fetching. The JSON is inlined into a <script> tag inside index.html, and the client-side JavaScript reads from that inline blob to render the cards. Vercel serves the HTML as a plain static file, gzipped on the wire, cached at the edge, done.

The pedagogy of this shape matters to me. A study tool that depends on an API can go down on the day of the exam. A study tool that is a single HTML file can be saved to disk, opened offline, mirrored, forked. My deploy story is vercel --prod. My rollback story is git revert. For a tool that a student might load in a coffee shop the morning of a five-hour test, that reliability profile is the actual product.

The palette leans into the paper metaphor. Paper #f8f1e7, ink #1f2430, accent teal #0f766e, burnt orange #b45309, Palatino serif for the body. It reads like a workbook, which is the mood I wanted.

The codename "ache"

The repo is named "ache". The site brands itself "GRE AWA Studio / Issue Pool Atlas". Nothing in the repo explains where "ache" came from and, honestly, I do not remember. It might have been a compression of "AWA-che" that made sense on a Tuesday night and stopped making sense on a Wednesday morning. It might have been a mood. If you were hoping for a naming story with a punchline, this is not the post. The post is: 158 prompts, twelve topical specs plus four fallbacks, one Python file, one static page. Study one card, close the tab, come back tomorrow.

How to use this for a 5+ score

Two things, if you are looking at the site.

Walk the pool in order. The atlas defaults to the ETS pool ordering. Fifteen minutes a day, six cards a day, and the pool is done in under a month.

Read the template, write the argument. The colour-coded highlighting is there so you can steal the shape without stealing the sentences. The scaffolding is a shape. You still have to drive.

Cite as: Saravanan, K. (2026). Issue Pool Atlas: baking 158 GRE prompts into one static page. Kaushik Saravanan. https://www.kaushik.cv/blog/ache-issue-pool-atlas