@@ -197,14 +197,14 @@ function showImage(evt: MouseEvent) {
197197 <div class =" col-sm-3" >
198198 <div class =" card h-100 shadow-sm border-0 accented" >
199199 <div class =" card-inner" >
200- <router-link :to =" {path: '/http'}" >
201- <div class =" card-body" >
200+ <router-link :to =" {path: '/http'}" class = " d-flex flex-column h-100 " >
201+ <div class =" card-body d-flex flex-column " >
202202 <h5 class =" card-title fw-bold mb-3" >Mock REST APIs</h5 >
203203 <p class =" card-text" >
204204 Simulate REST endpoints to develop and test clients
205205 without waiting for real backend services.
206206 </p >
207- <div class =" icon-link cta" >Learn more
207+ <div class =" icon-link cta mt-auto align-self-start " >Learn more
208208 <span class =" bi bi-chevron-right" ></span >
209209 <span class =" bi bi-arrow-right hover" ></span >
210210 </div >
@@ -217,14 +217,14 @@ function showImage(evt: MouseEvent) {
217217 <div class =" col-sm-3" >
218218 <div class =" card h-100 shadow-sm border-0 accented" >
219219 <div class =" card-inner" >
220- <router-link :to =" {path: '/kafka'}" >
221- <div class =" card-body" >
220+ <router-link :to =" {path: '/kafka'}" class = " d-flex flex-column h-100 " >
221+ <div class =" card-body d-flex flex-column " >
222222 <h5 class =" card-title fw-bold mb-3" >Simulate Kafka Events</h5 >
223223 <p class =" card-text" >
224224 Mock Kafka topics and message streams to test
225225 event-driven systems and service interactions.
226226 </p >
227- <div class =" icon-link cta" >Learn more
227+ <div class =" icon-link cta mt-auto align-self-start " >Learn more
228228 <span class =" bi bi-chevron-right" ></span >
229229 <span class =" bi bi-arrow-right hover" ></span >
230230 </div >
@@ -236,14 +236,14 @@ function showImage(evt: MouseEvent) {
236236 <div class =" col-sm-3" >
237237 <div class =" card h-100 shadow-sm border-0 accented" >
238238 <div class =" card-inner" >
239- <router-link :to =" {path: '/ldap'}" >
240- <div class =" card-body" >
239+ <router-link :to =" {path: '/ldap'}" class = " d-flex flex-column h-100 " >
240+ <div class =" card-body d-flex flex-column " >
241241 <h5 class =" card-title fw-bold mb-3" >Mock LDAP Services</h5 >
242242 <p class =" card-text" >
243243 Simulate directory and authentication services
244244 to test user access, roles, and permissions safely.
245245 </p >
246- <div class =" icon-link cta" >Learn more
246+ <div class =" icon-link cta mt-auto align-self-start " >Learn more
247247 <span class =" bi bi-chevron-right" ></span >
248248 <span class =" bi bi-arrow-right hover" ></span >
249249 </div >
@@ -255,14 +255,14 @@ function showImage(evt: MouseEvent) {
255255 <div class =" col-sm-3" >
256256 <div class =" card h-100 shadow-sm border-0 accented" >
257257 <div class =" card-inner" >
258- <router-link :to =" {path: '/mail'}" >
259- <div class =" card-body" >
258+ <router-link :to =" {path: '/mail'}" class = " d-flex flex-column h-100 " >
259+ <div class =" card-body d-flex flex-column " >
260260 <h5 class =" card-title fw-bold mb-3" >SMTP Email Testing</h5 >
261261 <p class =" card-text" >
262262 Test email workflows by simulating SMTP and IMAP servers
263263 without sending real messages.
264264 </p >
265- <div class =" icon-link cta" >Learn more
265+ <div class =" icon-link cta mt-auto align-self-start " >Learn more
266266 <span class =" bi bi-chevron-right" ></span >
267267 <span class =" bi bi-arrow-right hover" ></span >
268268 </div >
@@ -312,8 +312,8 @@ function showImage(evt: MouseEvent) {
312312 Simulate edge cases, conditional logic, errors, and real-world workflows
313313 without changing your API specifications.
314314 </p >
315- <router-link :to =" { path: '/docs/javascript-api' }" >
316- < button type = " button " class = " btn btn-outline-primary btn-sm " > Explore JavaScript Mocking</ button >
315+ <router-link :to =" { path: '/docs/javascript-api' }" class = " btn btn-outline-primary btn-sm mt-3 mb-3 " >
316+ Explore JavaScript Mocking
317317 </router-link >
318318 </div >
319319 <div class =" col-12 col-lg-6 order-lg-1 d-flex justify-content-center" >
@@ -331,8 +331,8 @@ function showImage(evt: MouseEvent) {
331331 <p class =" fst-italic" >
332332 Ensure consistent testing across local development, CI pipelines, and cloud environments.
333333 </p >
334- <router-link :to =" { path: '/docs/guides/get-started/running' }" >
335- < button type = " button " class = " btn btn-outline-primary btn-sm " > Learn How to Run Mokapi</ button >
334+ <router-link :to =" { path: '/docs/guides/get-started/running' }" class = " btn btn-outline-primary btn-sm " >
335+ Learn How to Run Mokapi
336336 </router-link >
337337 </div >
338338 <div class =" col-12 col-lg-6 order-lg-2 d-flex justify-content-center" >
@@ -351,8 +351,8 @@ function showImage(evt: MouseEvent) {
351351 <p class =" fst-italic" >
352352 Version-controlled mocks reduce errors, simplify audits, and make collaboration easier.
353353 </p >
354- <router-link :to =" { path: '/docs/configuration' }" >
355- < button type = " button " class = " btn btn-outline-primary btn-sm " > Learn More</ button >
354+ <router-link :to =" { path: '/docs/configuration' }" class = " btn btn-outline-primary btn-sm mt-3 mb-3 " >
355+ Learn More
356356 </router-link >
357357 </div >
358358 <div class =" col-12 col-lg-6 order-lg-1 d-flex justify-content-center" >
@@ -371,8 +371,8 @@ function showImage(evt: MouseEvent) {
371371 <p class =" fst-italic" >
372372 Produce lifelike data to catch bugs early and test edge cases that rarely occur in production.
373373 </p >
374- <router-link :to =" { path: '/docs/guides/get-started/test-data' }" >
375- < button type = " button " class = " btn btn-outline-primary btn-sm " > Explore Fake Data Features</ button >
374+ <router-link :to =" { path: '/docs/guides/get-started/test-data' }" class = " btn btn-outline-primary btn-sm mt-3 mb-3 " >
375+ Explore Fake Data Features
376376 </router-link >
377377 </div >
378378 <div class =" col-12 col-lg-6 order-lg-2 d-flex justify-content-center" >
@@ -391,8 +391,8 @@ function showImage(evt: MouseEvent) {
391391 <p class =" fst-italic" >
392392 Easily adapt mocks for specific environments or experiments without breaking the main API spec.
393393 </p >
394- <router-link :to =" { path: '/docs/configuration/patching' }" >
395- < button type = " button " class = " btn btn-outline-primary btn-sm " > Learn About Patching</ button >
394+ <router-link :to =" { path: '/docs/configuration/patching' }" class = " btn btn-outline-primary btn-sm mt-3 mb-3 " >
395+ Learn About Patching
396396 </router-link >
397397 </div >
398398 <div class =" col-12 col-lg-6 order-lg-1 d-flex justify-content-center" >
@@ -411,7 +411,7 @@ function showImage(evt: MouseEvent) {
411411 <p class =" fst-italic" >
412412 Gain real-time insight into requests, responses, and logs, making debugging and validation faster.
413413 </p >
414- <div class =" d-flex gap-2 justify-content-lg-start justify-content-center flex-wrap" >
414+ <div class =" d-flex gap-2 justify-content-lg-start justify-content-center flex-wrap mt-3 mb-3 " >
415415 <a href =" https://mokapi.io/dashboard-demo" class =" btn btn-outline-primary btn-sm" >
416416 Live Dashboard Demo
417417 </a >
@@ -441,68 +441,72 @@ function showImage(evt: MouseEvent) {
441441 <!-- REST API Tutorial -->
442442 <div class =" col" >
443443 <div class =" card h-100 shadow-sm border-0" >
444- <div class =" card-body" >
444+ <div class =" card-body d-flex flex-column " >
445445 <h3 class =" card-title" >
446446 <span class =" icon me-2 bi-globe" ></span >Mock REST APIs with OpenAPI
447447 </h3 >
448448 <p >Learn how to mock an OpenAPI spec, configure Mokapi, and run it in Docker. Test REST endpoints without waiting for live APIs.</p >
449- <a href =" docs/resources/tutorials/get-started-with-rest-api" class =" btn btn-outline-primary btn-sm" >Start Tutorial</a >
449+ <a href =" docs/resources/tutorials/get-started-with-rest-api" class =" btn btn-outline-primary btn-sm mt-auto align-self-start " >Start Tutorial</a >
450450 </div >
451451 </div >
452452 </div >
453453
454454 <!-- Kafka Tutorial -->
455455 <div class =" col" >
456456 <div class =" card h-100 shadow-sm border-0" >
457- <div class =" card-body" >
457+ <div class =" card-body d-flex flex-column " >
458458 <h3 class =" card-title" >
459459 <span class =" icon me-2 bi-lightning" ></span >Simulate Kafka Topics with AsyncAPI
460460 </h3 >
461461 <p >Test Kafka producers and consumers by mocking topics according to your AsyncAPI spec. Ensure reliable message generation and integration without a live Kafka cluster.</p >
462- <a href =" docs/resources/tutorials/get-started-with-kafka" class =" btn btn-outline-primary btn-sm" >Start Tutorial</a >
462+ <a href =" docs/resources/tutorials/get-started-with-kafka" class =" btn btn-outline-primary btn-sm mt-auto align-self-start " >Start Tutorial</a >
463463 </div >
464464 </div >
465465 </div >
466466
467467 <!-- LDAP Tutorial -->
468468 <div class =" col" >
469469 <div class =" card h-100 shadow-sm border-0" >
470- <div class =" card-body" >
470+ <div class =" card-body d-flex flex-column " >
471471 <h3 class =" card-title" >
472472 <span class =" icon me-2 bi-person-check" ></span >Mock LDAP Authentication
473473 </h3 >
474474 <p >Step-by-step guide to mock LDAP login using Mokapi and Node.js. Test authentication flows without a real server.</p >
475- <a href =" docs/resources/tutorials/mock-ldap-authentication-in-node" class =" btn btn-outline-primary btn-sm" >Start Tutorial</a >
475+ <a href =" docs/resources/tutorials/mock-ldap-authentication-in-node" class =" btn btn-outline-primary btn-sm mt-auto align-self-start " >Start Tutorial</a >
476476 </div >
477477 </div >
478478 </div >
479479
480480 <!-- SMTP Tutorial -->
481481 <div class =" col" >
482482 <div class =" card h-100 shadow-sm border-0" >
483- <div class =" card-body" >
483+ <div class =" card-body d-flex flex-column " >
484484 <h3 class =" card-title" >
485485 <span class =" icon me-2 bi-envelope-at-fill" ></span >Mock SMTP Email Sending
486486 </h3 >
487487 <p >Simulate an SMTP server and send test emails using Node.js. Perfect for validating email workflows without real mail servers.</p >
488- <a href =" /docs/resources/tutorials/mock-smtp-server-send-mail-using-node" class =" btn btn-outline-primary btn-sm" >Start Tutorial</a >
488+ <a href =" /docs/resources/tutorials/mock-smtp-server-send-mail-using-node" class =" btn btn-outline-primary btn-sm mt-auto align-self-start " >Start Tutorial</a >
489489 </div >
490490 </div >
491491 </div >
492492
493- <div class =" col" >
493+ </div >
494+
495+ <!-- Enforce API Contracts -->
496+ <div class =" row justify-content-center g-4 mt-1" >
497+ <div class =" col-md-6 col-lg-6" >
494498 <div class =" card h-100 shadow-sm border-0" >
495- <div class =" card-body" >
499+ <div class =" card-body d-flex flex-column " >
496500 <h3 class =" card-title" >
497501 <span class =" icon me-2 bi-shield-check" ></span >Enforce API Contracts
498502 </h3 >
499503 <p >Validate HTTP requests and responses against OpenAPI specs to catch API issues early in development or testing.</p >
500- <a href =" /docs/resources/blogs/ensuring-api-contract-compliance-with-mokapi" class =" btn btn-outline-primary btn-sm" >Read Blog</a >
504+ <a href =" /docs/resources/blogs/ensuring-api-contract-compliance-with-mokapi" class =" btn btn-outline-primary btn-sm mt-auto align-self-start " >Read Blog</a >
501505 </div >
502506 </div >
503507 </div >
508+ </div >
504509
505- </div >
506510 </div >
507511 </section >
508512
0 commit comments