An authoritative, Google AdSense–ready digital editorial magazine built with Next.js (App Router), TypeScript, and Tailwind CSS. Featuring 10 comprehensive, research-backed long-form articles published for the modern era.
Readora is designed as a digital editorial publication—evoking the aesthetic rigor, typographical elegance, and intellectual depth of premier periodicals (The Atlantic, Monocle, Wired, Stripe Press) while delivering technical SEO and Core Web Vitals performance.
ads.txt integration, verified authors, and comprehensive trust pages./sitemap.xml), RSS Feed (/feed.xml), robots.txt, and Schema.org JSON-LD (NewsMediaOrganization, WebSite, TechArticle, Person, BreadcrumbList).@tailwindcss/typography#FAF8F5, Charcoal ink #141416, Terracotta accent #9A3412)├── public/
│ ├── ads.txt # AdSense Publisher verification record
│ ├── images/ # Static assets & brand graphics
│ └── CNAME # Custom domain configuration (readora.me)
├── src/
│ ├── app/
│ │ ├── layout.tsx # Root layout with masthead, nav, schema & footer
│ │ ├── page.tsx # Editorial homepage (Hero, Trending, Picks, Sections)
│ │ ├── globals.css # Tailwind directives and editorial typography
│ │ ├── robots.ts # Automated robots.txt generator
│ │ ├── sitemap.ts # Automated XML sitemap generator
│ │ ├── feed.xml/
│ │ │ └── route.ts # Full RSS 2.0 XML syndication feed
│ │ ├── blog/
│ │ │ ├── page.tsx # Searchable, filterable, paginated article archive
│ │ │ └── [slug]/
│ │ │ └── page.tsx # Dynamic article view (TOC, FAQs, Sources, Sharing)
│ │ ├── categories/
│ │ │ ├── page.tsx # All 5 editorial categories
│ │ │ └── [slug]/page.tsx# Category-specific article index
│ │ ├── authors/
│ │ │ ├── page.tsx # Editorial masthead & author directory
│ │ │ └── [slug]/page.tsx# Author dossier & byline articles
│ │ ├── about/page.tsx # Editorial mission & founding principles
│ │ ├── contact/page.tsx # Interactive contact & news-tip desk
│ │ ├── privacy-policy/ # GDPR, CCPA, and cookie ad disclosures
│ │ ├── terms-and-conditions/
│ │ ├── disclaimer/ # Engineering, cyber defense, and financial disclaimers
│ │ └── editorial-policy/ # AI disclosure, fact-checking, corrections policy
│ ├── components/
│ │ ├── ads/ # AdSlot, HeaderAdSlot, InArticleAdSlot, SidebarAdSlot
│ │ ├── article/ # TOC, AuthorBio, SourcesList, FaqSection, SocialShare
│ │ ├── blog/ # ArticleCard, FeaturedArticle, TrendingStories, BlogFilters
│ │ ├── layout/ # Header, AnnouncementBar, Footer, Breadcrumbs
│ │ ├── newsletter/ # Interactive validated newsletter subscription boxes
│ │ └── seo/ # Schema.org JSON-LD structured data generators
│ ├── config/
│ │ └── ads.config.ts # Centralized AdSense configuration toggle
│ ├── content/
│ │ └── posts/ # 10 comprehensive, researched articles
│ ├── data/
│ │ ├── authors.ts # Real, verified editorial author profiles
│ │ ├── categories.ts # Category taxonomies and metadata
│ │ └── siteConfig.ts # Global site settings and social links
│ └── types/
│ └── index.ts # Type definitions for articles, authors, categories
├── tailwind.config.ts
├── tsconfig.json
└── package.json
v18.18.0 or later (Tested on v24.14.0)v9+ or v11+Clone the repository and install dependencies:
git clone https://github.com/Aliraza324/Aliraza324.github.io.git
cd Aliraza324.github.io
npm install
Start the development server:
npm run dev
Open http://localhost:3000 in your browser.
To verify TypeScript, ESLint, and compile an optimized production static build:
# 1. Type check
npx tsc --noEmit
# 2. Linting
npm run lint
# 3. Production build
npm run build
# 4. Preview production build locally
npm run start
Create a .env.local file in the root directory for your environment configurations:
# Site Domain
NEXT_PUBLIC_SITE_URL="https://readora.me"
# Google AdSense Central Configuration (Disabled by default)
NEXT_PUBLIC_ADSENSE_ENABLED="false"
NEXT_PUBLIC_ADSENSE_CLIENT_ID="" # e.g. "ca-pub-XXXXXXXXXXXXXXXX"
NEXT_PUBLIC_ADSENSE_SLOT_HEADER=""
NEXT_PUBLIC_ADSENSE_SLOT_IN_ARTICLE=""
NEXT_PUBLIC_ADSENSE_SLOT_SIDEBAR=""
NEXT_PUBLIC_ADSENSE_SLOT_FOOTER=""
# Optional: Set to true only in development to preview ad slot boundaries
NEXT_PUBLIC_SHOW_AD_PLACEHOLDERS="false"
Before submitting Readora to Google AdSense:
NEXT_PUBLIC_ADSENSE_ENABLED is set to "false"./about, /contact, /privacy-policy, /terms-and-conditions, /editorial-policy).https://readora.me in the Google AdSense Console.pub-XXXXXXXXXXXXXXXX.ads.txtEdit public/ads.txt to include your official publisher record:
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0
Once Google reviews and approves the publication:
NEXT_PUBLIC_ADSENSE_ENABLED="true"
NEXT_PUBLIC_ADSENSE_CLIENT_ID="ca-pub-XXXXXXXXXXXXXXXX"
NEXT_PUBLIC_ADSENSE_SLOT_HEADER="1234567890"
NEXT_PUBLIC_ADSENSE_SLOT_IN_ARTICLE="2345678901"
NEXT_PUBLIC_ADSENSE_SLOT_SIDEBAR="3456789012"
NEXT_PUBLIC_ADSENSE_SLOT_FOOTER="4567890123"
To publish a new article:
src/content/posts/post-[number].ts adhering to the Article interface in src/types/index.ts.src/content/posts/index.ts:
import { post11 } from './post-11';
export const allPosts: Article[] = [..., post11];
npx tsc --noEmit and npm run build to ensure static generation passes cleanly.TechArticle), author bios (Person), homepage (WebSite search and NewsMediaOrganization), and breadcrumbs (BreadcrumbList)./feed.xml for standard feed readers./sitemap.xml for Google Search Console.All editorial text and brand assets © 2026 Readora Media. Code is released under the MIT License.