मैंने अपना Custom PHP Blog Admin Panel AI की मदद से कैसे बनाया — पूरी कहानी Step by Step
सच बताऊं तो जब मैंने पहली बार सोचा कि अपना खुद का blog admin panel बनाऊंगा, तो लगा था यह काम बस कुछ घंटों का है। लेकिन जैसे-जैसे काम आगे बढ़ा, समझ आया कि एक proper, secure, और user-friendly admin panel बनाना — जिसमें WYSIWYG editor हो, image upload हो, Hindi support हो, और security भी tight हो — यह इतना आसान नहीं था।
इस पूरी journey में मैंने Claude AI की मदद ली और जो result आया, वो सच में काबिल-ए-तारीफ था। आज इस article में मैं आपको step by step बताऊंगा कि हमने क्या किया, कौन-कौन सी गलतियां हुईं, उन्हें कैसे fix किया, और आप भी अपना custom blog system कैसे बना सकते हैं।
अगर आप WordPress से थक गए हैं, या फिर lightweight और fast blog system चाहते हैं जो पूरी तरह आपके control में हो — तो यह article आपके लिए ही है।
पहले समझते हैं — WordPress क्यों नहीं?
देखिए, WordPress बुरा नहीं है। लेकिन जब आप एक simple coding tutorial blog चला रहे हों, तो WordPress का पूरा infrastructure काफी heavy लगता है। हर plugin एक नई dependency है, हर update एक नया risk है, और hosting पर load भी ज्यादा पड़ता है।
मेरी जरूरतें बिल्कुल clear थीं:
- Fast loading blog जो SEO-friendly हो
- Hindi और English दोनों में content लिखने की सुविधा
- Simple admin panel जो मैं खुद manage कर सकूं
- Direct image upload — कोई third-party CDN नहीं
- Tight security — SQL injection, XSS, CSRF सब से बचाव
इसीलिए मैंने decide किया कि PHP + MySQL से scratch में बनाऊंगा। और Claude AI को अपना coding partner बनाया।
Project की शुरुआत — Database Structure
हर चीज की नींव database होता है। हमने पहले यह table बनाई:
यहां एक important बात — utf8mb4 charset use करना जरूरी है। यह Hindi, Emoji और सभी Unicode characters को properly store करता है। अगर आप utf8 use करते हैं तो Hindi characters corrupt हो सकते हैं।
Config File — Foundation जो सब चीजों को जोड़ती है
हमने एक clean config.php बनाई जिसमें सभी constants defined हैं:
एक बहुत important बात — password plain text में कभी मत रखो। हमने password_hash() function use किया जो BCrypt algorithm से एक secure hash बनाता है। यह hash कभी reverse नहीं किया जा सकता।
Upload URL को हमेशा full absolute URL रखो। यह गलती हमने खुद की थी — जब हमने relative path /uploads/blog/ रखी, तो images blog post pages पर load नहीं हो रही थीं क्योंकि browser wrong path construct कर रहा था।
Admin Panel — Security पहले, Design बाद में
Admin panel बनाते वक्त Claude ने मुझे पहले security पर focus करने को कहा। यह बिल्कुल सही approach था। एक insecure admin panel basically आपके पूरे server का दरवाजा खोल देता है।
CSRF Protection
CSRF यानी Cross-Site Request Forgery। इसमें कोई attacker आपसे अनजाने में ऐसा form submit करवा सकता है जो आप नहीं चाहते। इसे रोकने के लिए हमने हर form में एक secret token डाला:
hash_equals() use करना जरूरी है — यह timing attack से बचाता है। अगर आप normal === use करें तो attacker timing analysis से token guess कर सकता है।
SQL Injection से बचाव — Prepared Statements
यह सबसे common और dangerous vulnerability है। Original code में raw queries थीं:
अगर कोई slug में ' OR '1'='1 डाल दे, तो सारा database expose हो जाता है। हमने यह fix किया:
Prepared statements में user input और query बिल्कुल अलग रहते हैं। Database engine पहले query compile करता है, फिर parameter add करता है — injection possible ही नहीं होता।
Session Security
Session hijacking रोकने के लिए:
Brute Force Protection
हमने login attempts limit भी लगाई — 5 wrong attempts के बाद 5 मिनट का lockout:
WYSIWYG Editor — Hindi और English दोनों के लिए
यह project का सबसे interesting हिस्सा था। हमें एक ऐसा editor चाहिए था जो:
- WordPress जैसा visual editing दे
- Hindi (Devanagari) fonts support करे
- HTML mode भी हो power users के लिए
- H1, H2, H3, Bold, Italic, Lists सब formatting options हों
हमने Quill.js library choose की। यह open source है, lightweight है, और highly customizable है।
Hindi Font Support
हिंदी लिखने के लिए हमने Google Fonts से Noto Sans Devanagari load की। यह font Hindi characters को beautifully render करती है और web safe भी है।
हमने एक font picker भी बनाया — English, हिंदी (Noto), Mangal, और Kokila fonts के buttons। User जिस font में लिखना चाहे, एक click में switch कर सकता है।
Visual ↔ HTML Toggle
Experienced bloggers sometimes HTML directly likhna chahte hain। हमने दो tabs बनाए — Visual Editor और HTML Source. दोनों के बीच switch करते वक्त content automatically sync होता है:
Image Upload — Server पर Direct
यह feature बहुत important था। पहले सिर्फ URL paste करने का option था। हमने proper file upload implement किया।
Server Side Validation
File upload के साथ सबसे बड़ा risk है — कोई PHP file upload करके server पर run करे। इसे रोकने के लिए multiple layers of validation:
Upload Folder Security
Upload folder में automatically एक .htaccess create होती है जो PHP execution block करती है:
यह बहुत important है। अगर कोई किसी तरह PHP file upload कर दे, तो भी execute नहीं होगी।
.htaccess — Clean URLs का जादू
हमें URLs को /blog/post-slug/ format में चाहिए था, लेकिन actually file post.php?slug=post-slug पर है। यह magic .htaccess करती है:
एक important lesson — RewriteBase /blog/ line बहुत जरूरी है अगर आपका blog एक subfolder में है। यह line नहीं होने से हमें 404 errors आ रहे थे।
और हां — negative lookahead (?!) syntax कुछ hosting providers (जैसे Hostinger) पर properly काम नहीं करता। इसलिए हमने simple approach use की — real files automatically pass होती हैं RewriteCond -f से।
Post.php — Blog Post Display Page
यह वो page है जो visitors देखते हैं। इसमें कई important features हैं।
Light/Dark Mode Toggle
Readability के लिए हमने दोनों modes implement किए। User का choice localStorage में save होता है:
Auto Table of Contents
Post में सभी H2 और H3 headings को automatically detect करके sidebar में TOC बनती है:
Reading Progress Bar
Page के top पर एक progress bar है जो scroll के साथ fill होती है — यह user को बताती है कि article कितना पढ़ा गया।
View Counter
Session-based view counting — same user same post को बार-बार view न करे:
वो Bugs जो हमें परेशान करते रहे
सच कहूं तो यह project बिना bugs के पूरा नहीं हुआ। कुछ ऐसी गलतियां हुईं जो बहुत सिखाने वाली थीं।
Bug 1 — $post Variable का गायब होना
यह सबसे frustrating bug था। Post page खुल रही थी लेकिन title, content, date — सब blank था। Date 01 Jan 1970 दिख रही थी (यह Unix timestamp 0 का result है)।
कारण था — code में $post_row = $result->fetch_assoc() था, लेकिन आगे $post use हो रहा था। Variable assignment ही नहीं हुई थी! PHP ने silently empty array बना दिया।
Fix बहुत simple था:
Bug 2 — Images Load नहीं हो रही थीं
Database में image path /uploads/blog/image.webp था — relative path। जब user /blog/post-slug/ पर होता था, तो browser इसे /blog/uploads/blog/image.webp समझता था जो exist नहीं करता।
Fix — UPLOAD_URL में full absolute URL:
और जो old posts थीं, उनके लिए database update:
Bug 3 — Admin Panel 403 Error
जब हमने .htaccess update किया, तो admin.php खुद ही block हो गई! कारण था negative lookahead regex जो Hostinger पर support नहीं था।
Fix — Simple approach:
Real files automatically allow हो जाती हैं। Complex regex की जरूरत नहीं।
Bug 4 — Session Regenerate हर Page पर
Security के नाम पर हमने session_regenerate_id(true) हर page load पर लगाया था। इससे view counter session key हर बार change हो जाती थी और हर refresh पर view count बढ़ता था।
Fix — Session regenerate सिर्फ login/logout पर करो।
SEO Optimization — जो हमने Build में Include किया
SEO सिर्फ keywords नहीं होता। Technical SEO भी बहुत important है।
Meta Tags
Open Graph (Social Sharing)
JSON-LD Structured Data
यह Google को clearly बताता है कि यह article है, कब publish हुआ, और किसने लिखा। इससे rich snippets मिल सकते हैं search results में।
Slug — URL Structure
Clean, keyword-rich slugs SEO के लिए बहुत important हैं। हमने admin panel में auto-slug generation भी लगाई — title type करते ही slug automatically बनती है:
Design Philosophy — Readability First
Blog का design readability के आसपास बनाना चाहिए था। हमने Astra theme जैसा approach लिया:
- Font size — 18px base, content 20px। छोटे font से आंखें थकती हैं
- Line height — 1.9-2.0। Tight lines padhne mein dikkat hoti hai
- Max width — Content column 760px max। Wide column पढ़ना मुश्किल होता है
- Light mode default — Most readers light background पसंद करते हैं
- Hindi font — Noto Sans Devanagari जो web पर सबसे readable है
Performance Tips
अगर आप यह system खुद implement करें तो कुछ performance optimizations जरूर करें:
- Images के लिए
loading="lazy"attribute — above the fold images को छोड़कर - Google Fonts को
rel="preconnect"से preload करें - Content को
LONGTEXTमें store करें — large Hindi content के लिए - Database में
slugcolumn पर index लगाएं — queries fast होंगी - Static assets को browser cache करने दें .htaccess से
आगे क्या करें — Future Improvements
यह system अभी भी evolve हो रहा है। कुछ चीजें हैं जो add करनी हैं:
- Comment System — Readers की engagement के लिए
- Search — Posts search करने की functionality
- Categories Page — Category-wise posts listing
- RSS Feed — Readers को subscribe करने दें
- Sitemap Auto-generation — New posts automatically sitemap में
- Media Library — Uploaded images को manage करने की UI
क्या यह सबके लिए सही है?
यह एक valid सवाल है। अगर आप technically comfortable हैं PHP और MySQL के साथ, तो यह approach बहुत powerful है। आपका पूरा control है — कोई plugin dependency नहीं, कोई forced update नहीं, कोई unnecessary features नहीं जो आप use नहीं करते।
लेकिन अगर आप non-technical हैं या चाहते हैं कि सब कुछ out-of-the-box काम करे, तो WordPress या Ghost जैसे platforms better हैं।
मेरे लिए personally यह experience बहुत valuable था। एक blog system scratch से बनाकर मुझे PHP, MySQL security, Apache rewriting, file upload security, और frontend performance के बारे में जितना सीखा — वो किसी tutorial से नहीं सीखा जा सकता था।
Security Headers — वो Extra Layer जो अक्सर भूल जाते हैं
PHP में response headers add करना एक simple लेकिन बहुत effective security measure है। हमने post.php में यह headers लगाए:
X-Frame-Options: SAMEORIGIN एक बहुत important header है — यह आपके page को किसी दूसरे site के iframe में load होने से रोकता है। Clickjacking attacks में attacker आपके page को invisible iframe में load करके user को trick करता है। यह एक line का code है लेकिन एक पूरी category of attacks से बचाता है।
Strict-Transport-Security header browser को force करता है कि यह site हमेशा HTTPS से ही खुले। एक बार यह header set हो जाए तो browser automatically HTTP requests को HTTPS पर redirect करता है — server तक request पहुंचने से पहले ही।
Favicon का Issue — और उसका Permanent Fix
Favicon एक छोटी सी चीज है लेकिन branding के लिए important है। हमारे case में server पर favicon.svg था लेकिन PHP page में properly नहीं दिख रहा था। कभी-कभी hosting providers file paths differently handle करते हैं।
इसका permanent solution हमने inline SVG data URI से किया जो किसी external file पर depend नहीं करता — directly PHP variable में store होता है और हर condition में काम करता है:
Theme color meta tag mobile browsers में address bar का color change करता है — एक छोटी सी detail जो professional feel देती है और brand identity को reinforce करती है।
Performance — Database Indexing जरूर करें
जैसे-जैसे posts बढ़ती हैं, queries slow हो सकती हैं अगर database indexing नहीं की गई। यह एक ऐसी चीज है जो नए developers अक्सर ignore करते हैं और बाद में पछताते हैं।
Index का मतलब है database एक shortcut map बना लेता है। Without index, हर query पूरी table scan करती है — 10,000 posts हों तो seconds लग सकते हैं। With index, directly relevant rows तक microseconds में पहुंचा जा सकता है।
Deployment Checklist — Go-Live से पहले जरूर Check करें
जब भी आप ऐसा custom system live करें, यह checklist follow करें — एक भी point miss मत करो:
- display_errors = Off रखो production में। Error messages में database names, file paths और code structure दिखता है जो hackers के लिए goldmine है।
- Database credentials strong और unique रखो। Same password कई जगह use मत करो।
- Admin password हमेशा bcrypt hash से store करो — plain text बिल्कुल नहीं।
- Uploads folder में PHP execution blocked करो .htaccess से।
- HTTPS enable करो — Hostinger और cPanel पर free SSL available है।
- Directory listing disable करो (
Options -Indexes)। - config.php web accessible न हो — .htaccess से block करो।
- Regular backups — Database और files दोनों के। Automated backup setup करो।
निष्कर्ष — AI के साथ Code करना कैसा रहा?
Claude AI के साथ काम करना एक experienced developer के साथ pair programming जैसा था। वो सिर्फ code नहीं देता — समझाता भी है कि यह code क्यों लिखा जा रहा है, क्या risks हैं, और better alternatives क्या हो सकते हैं।
जब bugs आए तो AI ने directly live page fetch करके problem diagnose की — यह impressive था। Bug fix भी systematic था — पहले root cause, फिर fix, फिर verification।
कुछ mistakes जरूर हुईं — एक bug fix करते हुए नया bug create हुआ। लेकिन यह भी real development का हिस्सा है। Important यह है कि हर bug से कुछ सीखा।
अगर आप भी अपना custom blog system बनाना चाहते हैं, तो शुरुआत करें। Perfect का इंतजार मत करो। एक simple version बनाओ, use करो, problems सामने आएंगी, fix करो, और system better होता जाएगा।
CodeCraft पर आप PHP, MySQL, और web development से जुड़े सभी topics के free interactive courses पा सकते हैं — Live editor के साथ, Hindi और English दोनों में।