# Daily-Question: a frontend interview archive that ships as a Next.js app

> The question corpus lives in a GitHub repository and the website that renders it is a Next.js application built from that repository's own data. The interview content is the reason to look; the build pipeline is the reason to read the rest.

**shfshanyue/Daily-Question** — Internet big-tech referrals and interview-experience write-ups, plus a daily interview question push. Five minutes a day, land a big-tech offer in half a year.

- Repository: https://github.com/shfshanyue/Daily-Question
- Website: https://q.shanyue.tech
- Stars: 5,149 · Forks: 503
- Language: TypeScript
- License: not declared
- Published: 2026-09-23 · Updated: 2026-11-03 · Language: en
- Canonical page: https://hysenlabs.com/projects/shfshanyue-daily-question

## Three npm scripts describe the content pipeline

The content pipeline is visible in package.json rather than in prose. `issues` runs `tsx scripts/issue.ts`, `issues:build` runs `tsx scripts/build.ts`, and `codegen` runs `graphql-codegen --config github/codegen.ts`, with the codegen config living inside the `github/` directory. The repository root carries `data/`, `pages/`, `components/`, `lib/` and `public/`, which is the shape of a Next.js site rather than a flat list of questions.

Two GraphQL stacks sit in the dependency list at once. `graphql` 16.9.0 with `graphql-request` 7.1.2 serves the codegen path, and `@apollo/server` 5.5.0 with `cors` 2.8.5 sits alongside it. Which one answers requests at runtime is not settled by anything in the root listing, so treat the dual presence as a question to ask before you extend the site.

## package.json still calls the package next-app

The manifest names the package `next-app` at version 1.0.0. Its `repository.url` and its `bugs.url` both point at github.com/shfshanyue/next-app, while the repository you are reading is shfshanyue/Daily-Question. Nothing in the root listing corrects that.

The licence field says MIT, and the root has no LICENSE file. For a reader who wants to reuse the questions or fork the site, the consequence is narrow but real: the manifest's metadata sends a tooling command or an issue link to a different project name, and the licence claim rests on one JSON field rather than a file.

## pnpm 9.12.2 and a sixteen gigabyte heap in the build script

`packageManager` is pinned to pnpm@9.12.2, `.npmrc` and `pnpm-lock.yaml` sit at the root, and the Dockerfile reaches for corepack rather than a global install:

```bash
ENV COREPACK_NPM_REGISTRY=https://registry.npmmirror.com
RUN corepack enable
RUN pnpm i --frozen-lockfile --registry=https://registry.npmmirror.com
RUN pnpm run build
```

The build script itself is where the surprise sits:

```json
"build": "NODE_OPTIONS=--max-old-space-size=16384 next build",
"postbuild": "next-sitemap"
```

The flag raises Node's heap limit to 16 GB for the build, and the Dockerfile never raises the limit itself because the flag already lives in the script. The registry lines point every install at a Chinese mirror, which is the one line in this build you would want to change before running it elsewhere.

## docker-compose.yaml hardcodes the upstream host behind Traefik

The compose file declares one service, `question`, and wires it to a reverse proxy that it does not start:

```yaml
services:
  question:
    build: .
    restart: always
    env_file:
      - .env
    labels:
      - traefik.http.routers.question.rule=Host(`q.shanyue.tech`)
```

`restart: always` means the container comes back after every failure, including a misconfigured one, so a broken deploy looks alive in `docker ps` while serving errors. `env_file` points at `.env`, which is not in the repository, so a first `docker compose up -d` needs a file you have to author. The router rule matches the upstream hostname, and the `networks` block asks for an external network named `traefik_default`, so running your own copy means editing the host rule and creating that network before anything reaches a browser.

## The README's own site section still describes vuepress

A commented-out block in the README names the website stack as `vuepress` plus `github GraphQL api`, `github actions`, `alioss` and `alicdn`, and says creating or answering a question triggers an automatic rebuild and deploy via github actions. The manifest says something different: `next` 15.0.3 with `nextra` 3.2.4 and `nextra-theme-docs` 3.2.4.

The two approaches are not interchangeable. The VuePress path is a static publish where a push regenerates files and pushes them to object storage behind a CDN. The Next.js path builds an application that you can serve from the Docker image in the root, and the root also carries `vercel.json` and `serverless.yaml`, so three deployment shapes are plausible from the file list alone. Follow the README's build notes rather than the manifest and you will install the wrong toolchain.

## CodeSandbox links stand in for a repository of demos

The README explains why the demos are not vendored: CodeSandBox cannot share folders the way a repository can, so every example that involves code is linked one by one, nineteen entries in a numbered list. A few of them carry their lesson in the description: React.memo against re-rendering on a state change, `useEffect` cleanup timing, an array `index` used as a key with an input mixed into the list, synthetic events where `e.nativeEvent.currentTarget` reveals React binding everything to `#app`, and `element._owner` used to walk the FiberNode structure. State batching appears twice, once for event handlers and once for async requests, with the React 18 entry noting that everything batches.

The consequence is that the demos live on a third-party sandbox rather than in the code you cloned, so they drift independently of this repository and you cannot run them from a local checkout.

## No releases, and the last push to next was 2026-06-23

The repository has no GitHub releases, and the `version` field in the manifest stays at 1.0.0 with nothing in the repository publishing it. The default branch is `next`, not `master`, and the last push landed on 2026-06-23. For a reader deciding what to depend on, the practical result is simple: there is no artifact to pin, and a clone gives you whatever state `next` happens to be in.

The README also mixes three audiences. After the code links sit referral listings that ask you to add a WeChat contact for free referrals at three named companies, interview write-ups from another site grouped by company, and a nightly video stream at 9:10pm.

## Conclusion

Adopt this repository if you want a browsable archive of frontend interview questions with runnable examples, and if you intend to run the site rather than to depend on it as a library. Skip it if you need a packaged question API, a stable release to pin, or documentation that matches the current stack. Verify first that the scripts named in package.json still match the directories on the branch you clone, because the package identity, the README's own stack description and the questions live in three different places.

## FAQ

### What does the Daily-Question repository contain?

It collects frontend interview questions, each with an answer and discussion, and links runnable CodeSandBox examples for the ones that need code. The README states the goal as at least one question a day, with video explanation as well.

### What stack does the Daily-Question website run on?

The manifest lists next 15.0.3 with nextra 3.2.4 and nextra-theme-docs 3.2.4, plus graphql and codegen tooling pointed at github/codegen.ts. A commented-out README section still describes an older stack built on vuepress, github actions and alioss.

### How do I run the Daily-Question site locally?

The Dockerfile enables corepack and installs with `pnpm i --frozen-lockfile`, then runs the build script, which calls next build with a sixteen gigabyte heap cap. The compose file adds a Traefik service label, an `.env` file requirement and an external network named traefik_default, so a plain local start needs those adjusted.

### Does Daily-Question publish versioned releases?

No. The repository has no GitHub releases, and the version field in package.json reads 1.0.0 with no publishing step. The default branch is next, and the last push to it was on 2026-06-23.

## Sources

- [Issues](https://github.com/shfshanyue/Daily-Question/issues)
- [Project website](https://q.shanyue.tech)
- [README](https://github.com/shfshanyue/Daily-Question/blob/next/README.md)
- [shfshanyue/Daily-Question on GitHub](https://github.com/shfshanyue/Daily-Question)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/shfshanyue-daily-question
