Skip to content

Revamp readme.md#331

Closed
dhananjay6561 wants to merge 3 commits intokeploy:mainfrom
dhananjay6561:revamp_readme.md
Closed

Revamp readme.md#331
dhananjay6561 wants to merge 3 commits intokeploy:mainfrom
dhananjay6561:revamp_readme.md

Conversation

@dhananjay6561
Copy link
Copy Markdown
Member

PR Description: Comprehensive README Revamp

Overview

This PR provides a complete overhaul of the project's root README.md. The objective was to transform the documentation from a generic setup guide into a developer-friendly, technically documented resource that accurately reflects the current state of the Keploy blog website.

Previous Issues

  • Generic Content: Documentation lacked specific details about the blog's architecture and feature set.
  • Unverified Tech Stack: Listed technologies were not cross-checked against the actual codebase.
  • Incomplete Site Map: Dynamic routes, API endpoints, and navigation structures were not documented.
  • Poor Organization: Setup instructions were buried under less critical information.

Key Changes & Improvements

1. Technical Audit & Verification

  • Tech Stack Table: Conducted a full audit of package.json and source code. Every library (GSAP, Framer Motion, React Spring, Radix UI, etc.) is now listed with its specific use case and primary file locations.
  • Removed Redundancy: Removed unreferenced libraries (e.g., highlight.js) to ensure documentation accuracy.

2. Deep Site Mapping

  • Pages Table: Documented 12 core routes with URL patterns and live examples (e.g., https://keploy.io/blog/tag/a2a).
  • API Documentation: Detailed 5 server-side endpoints with descriptions of their functionality (Search, Preview, Proxying).
  • Navigation Hierarchy: Documented the complex mega-menu structure and Resources dropdown, mapping internal segments to external ecosystem links.

3. Structural Reorganization

  • Configuration-First: Moved Prerequisites, Setup, and Environment variables to the top for immediate dev accessibility.
  • Annotated Project Structure: Added a detailed directory tree with annotations for core components and library logic.

4. Qualitative Enhancements

  • Added a "What is this?" section highlighting the Next.js (SSG + ISR) architecture.
  • Included Contributing guidelines and Deployment details (Vercel + CloudFront proxying).
  • Fixed typos and improved formatting for better readability.

Technical Details

  • Architecture: Next.js 18 (Pages Router)
  • Data Source: Headless WordPress (WPGraphQL)
  • Deployment: Vercel + AWS CloudFront (Base path: /blog)

Verification

  • Cross-verified all cited files and component paths.
  • Validated URL patterns against pages/ directory structure.

Copilot AI review requested due to automatic review settings February 23, 2026 13:08
@dhananjay6561
Copy link
Copy Markdown
Member Author

@amaan-bhati kindly review the PR

@kilo-code-bot
Copy link
Copy Markdown

kilo-code-bot bot commented Feb 23, 2026

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Overview

This PR improves the blog website in several ways:

  • README.md: Complete documentation overhaul with better structure, badges, and clearer setup instructions
  • Testimonials: Enhanced marquee animation with CSS mask gradient effect and consistent timing
  • Avatar optimization: Moved some Twitter avatars to local storage for better reliability and performance
  • Package lockfile: Cleaned up peer dependency flags
Files Reviewed (6 files)
  • README.md - Documentation rewrite
  • components/testimonials.tsx - UI improvements (marquee mask, timing)
  • services/Tweets.tsx - Avatar path updates, reordering
  • styles/index.css - New .marquee-mask CSS class
  • public/avatars/* - New local avatar images
  • package-lock.json - Dependency cleanup

Notes

✅ Local avatar fallback mechanism in ReviewCard component handles image loading errors gracefully
✅ CSS mask provides smooth fade effect at marquee edges
✅ Documentation now includes clear prerequisites, setup steps, and deployment notes

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR primarily modernizes the root documentation while also updating the testimonials marquee UI/asset handling used on the homepage.

Changes:

  • Overhauled README.md with verified architecture, routes, API endpoints, and project structure documentation.
  • Refactored testimonials marquee rendering (mask-based fade, repeat/duration tweaks) and updated tweet/avatar data + added local avatar assets.
  • Included non-doc changes such as package-lock.json metadata edits.

Reviewed changes

Copilot reviewed 5 out of 12 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
README.md Replaced the old setup-focused README with a comprehensive, developer-facing guide (routes, API, structure, stack).
components/testimonials.tsx Updates marquee container styling and changes avatar loading/fallback logic for testimonials.
components/Marquee.tsx Adds transform rendering hints (will-change-transform, backface-visibility).
services/Tweets.tsx Reformats and updates tweet entries; switches some avatars to local /blog/avatars/* paths and adds new testimonials.
styles/index.css Adds .marquee-mask class for mask-based fade effect on marquee edges.
public/avatars/*.png Adds local avatar images used by testimonials.
public/avatars/avatar-placeholder.svg Adds a local placeholder avatar fallback asset.
package-lock.json Removes several "peer": true markers (lockfile metadata churn).
Comments suppressed due to low confidence (1)

README.md:276

  • Typo: "servr-side" should be "server-side".
- **Full-Text Search** — Client-side search with servr-side API backing (`/api/search-all`)
- **Pagination / Infinite Scroll** — Posts load progressively as the user scrolls
- **Syntax-Highlighted Code Blocks** — Prism.js for blog post code, CodeMirror for interactive JSON diffs

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

src={avatar}
onError={(e) => {
const img = e.target as HTMLImageElement;
if (img.src !== localPlaceholder) {
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (img.src !== localPlaceholder) is comparing img.src (typically an absolute URL) against a relative path string, so the condition won’t behave as intended in the browser. If the placeholder ever errors first, this can cause the fallback logic to keep re-running. Prefer comparing new URL(img.src).pathname (or endsWith(localPlaceholder)) or track fallback state via a data attribute.

Suggested change
if (img.src !== localPlaceholder) {
const isLocalPlaceholder = img.src.endsWith(localPlaceholder);
if (!isLocalPlaceholder) {

Copilot uses AI. Check for mistakes.
Comment thread README.md
Comment on lines +20 to +24
## What is this?

### Step 2. Populate Content
A **Next.js (Pages Router)** blog application that powers the [Keploy Blog](https://keploy.io/blog). Content is authored in a headless **WordPress** instance and fetched at build time via the **WPGraphQL** plugin. The site is statically generated with **Incremental Static Regeneration (ISR)**, revalidating every 10 seconds for near-instant page loads and always-fresh content.

Inside your WordPress admin, go to **Posts** and start adding new posts:
---
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR title/description focuses on a README revamp, but this PR also changes runtime UI behavior (testimonials marquee styling + avatar loading logic), adds new public assets, and modifies package-lock.json. If these changes are intentional, it would help to call them out explicitly in the PR description (or split into a separate PR) to keep review/rollback scope clear.

Copilot uses AI. Check for mistakes.
Comment thread README.md
## What is this?

### Step 2. Populate Content
A **Next.js (Pages Router)** blog application that powers the [Keploy Blog](https://keploy.io/blog). Content is authored in a headless **WordPress** instance and fetched at build time via the **WPGraphQL** plugin. The site is statically generated with **Incremental Static Regeneration (ISR)**, revalidating every 10 seconds for near-instant page loads and always-fresh content.
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The README says pages are revalidated "every 10 seconds", but several routes use different ISR intervals (e.g. many [slug] pages use revalidate: 60). The doc should reflect the actual per-route revalidate behavior (or avoid stating a single global value).

Suggested change
A **Next.js (Pages Router)** blog application that powers the [Keploy Blog](https://keploy.io/blog). Content is authored in a headless **WordPress** instance and fetched at build time via the **WPGraphQL** plugin. The site is statically generated with **Incremental Static Regeneration (ISR)**, revalidating every 10 seconds for near-instant page loads and always-fresh content.
A **Next.js (Pages Router)** blog application that powers the [Keploy Blog](https://keploy.io/blog). Content is authored in a headless **WordPress** instance and fetched at build time via the **WPGraphQL** plugin. The site is statically generated with **Incremental Static Regeneration (ISR)** to provide near-instant page loads while keeping content up to date.

Copilot uses AI. Check for mistakes.
Comment on lines +20 to +37
const fallbackAvatar = `https://ui-avatars.com/api/?name=${encodeURIComponent(name)}&background=random&size=64`;
const localPlaceholder = "/blog/avatars/avatar-placeholder.svg";
return (
<a href={post} target="_blank" className="lg:mx-2">
<a href={post} target="_blank" rel="noopener noreferrer" className="lg:mx-2">
<figure className="relative w-80 cursor-pointer overflow-hidden rounded-xl border p-4 border-gray-950/[.1] bg-gray-950/[.01] hover:bg-gray-950/[.05]">
<div className="flex flex-row items-center gap-2">
<img
className="rounded-full"
width="32"
height="32"
alt=""
src={proxiedAvatar}
alt={`${name}'s avatar`}
src={avatar}
onError={(e) => {
const img = e.target as HTMLImageElement;
if (img.src !== localPlaceholder) {
img.onerror = () => { img.src = localPlaceholder; };
img.src = fallbackAvatar;
}
Copy link

Copilot AI Feb 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReviewCard now uses src={avatar} directly (and falls back to ui-avatars.com). With the current CSP in next.config.js (img-src 'self' ...), remote avatars like https://pbs.twimg.com/... will be blocked, so images will always error and fall back to the placeholder. Consider restoring the /api/proxy-image?url=... behavior for external avatars (as used elsewhere in the codebase) or explicitly allow the required remote domains in the CSP (including pbs.twimg.com and ui-avatars.com).

Copilot uses AI. Check for mistakes.
@amaan-bhati amaan-bhati self-requested a review February 24, 2026 12:18
Copy link
Copy Markdown
Member

@amaan-bhati amaan-bhati left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Closing this pr since it got covered in: #333

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants