diff --git a/astro.config.mjs b/astro.config.mjs
index bae7e44..dbb8620 100755
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -3,10 +3,11 @@ import react from "@astrojs/react";
import sitemap from "@astrojs/sitemap";
import tailwind from "@astrojs/tailwind";
import AutoImport from "astro-auto-import";
-import { defineConfig, squooshImageService } from "astro/config";
+import { defineConfig } from "astro/config";
import remarkCollapse from "remark-collapse";
import remarkToc from "remark-toc";
import config from "./src/config/config.json";
+import sharp from "sharp";
// https://astro.build/config
export default defineConfig({
@@ -14,7 +15,7 @@ export default defineConfig({
base: config.site.base_path ? config.site.base_path : "/",
trailingSlash: config.site.trailing_slash ? "always" : "never",
image: {
- service: squooshImageService(),
+ service: sharp(),
},
integrations: [
react(),
diff --git a/package.json b/package.json
index 795bbbc..6715bdd 100755
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "astroplate",
- "version": "4.1.0",
+ "version": "5.0.0",
"description": "Astro and Tailwindcss boilerplate",
"author": "zeon.studio",
"license": "MIT",
@@ -9,53 +9,54 @@
"dev": "yarn generate-json && astro dev",
"build": "yarn generate-json && astro build",
"preview": "astro preview",
+ "check": "astro check",
"format": "prettier -w ./src",
"generate-json": "node scripts/jsonGenerator.js",
"remove-darkmode": "node scripts/removeDarkmode.js && yarn format"
},
"dependencies": {
- "@astrojs/check": "^0.9.3",
- "@astrojs/mdx": "^3.1.4",
- "@astrojs/react": "^3.6.2",
- "@astrojs/rss": "^4.0.7",
- "@astrojs/sitemap": "^3.1.6",
- "@astrojs/tailwind": "^5.1.0",
- "astro": "^4.14.5",
- "astro-auto-import": "^0.4.2",
+ "@astrojs/check": "0.9.4",
+ "@astrojs/mdx": "4.0.3",
+ "@astrojs/react": "4.1.2",
+ "@astrojs/rss": "4.0.11",
+ "@astrojs/sitemap": "3.2.1",
+ "@astrojs/tailwind": "5.1.4",
+ "astro": "5.1.2",
+ "astro-auto-import": "^0.4.4",
"astro-font": "^0.1.81",
- "date-fns": "^3.6.0",
+ "date-fns": "^4.1.0",
"disqus-react": "^1.1.5",
"github-slugger": "^2.0.0",
"gray-matter": "^4.0.3",
- "marked": "^14.1.0",
+ "marked": "^15.0.5",
"prettier-plugin-astro": "^0.14.1",
- "prettier-plugin-tailwindcss": "^0.6.6",
+ "prettier-plugin-tailwindcss": "^0.6.9",
"prop-types": "^15.8.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
- "react-icons": "^5.3.0",
+ "react-icons": "^5.4.0",
"react-lite-youtube-embed": "^2.4.0",
"remark-collapse": "^0.1.2",
"remark-toc": "^9.0.0",
- "swiper": "^11.1.10"
+ "swiper": "^11.2.0"
},
"devDependencies": {
- "@tailwindcss/forms": "^0.5.7",
- "@tailwindcss/typography": "^0.5.14",
+ "@tailwindcss/forms": "^0.5.9",
+ "@tailwindcss/typography": "^0.5.15",
"@types/marked": "^5.0.2",
- "@types/node": "22.5.0",
- "@types/react": "18.3.4",
- "@types/react-dom": "18.3.0",
+ "@types/node": "22.10.5",
+ "@types/react": "19.0.2",
+ "@types/react-dom": "19.0.2",
"autoprefixer": "^10.4.20",
- "eslint": "^9.9.1",
- "postcss": "^8.4.41",
- "prettier": "^3.3.3",
+ "eslint": "^9.17.0",
+ "postcss": "^8.4.49",
+ "prettier": "^3.4.2",
"prettier-plugin-astro": "^0.14.1",
- "prettier-plugin-tailwindcss": "^0.6.6",
- "sass": "^1.77.8",
+ "prettier-plugin-tailwindcss": "^0.6.9",
+ "sass": "^1.83.1",
"sharp": "0.33.5",
"tailwind-bootstrap-grid": "^5.1.0",
- "tailwindcss": "^3.4.10",
- "typescript": "^5.5.4"
+ "tailwindcss": "^3.4.17",
+ "typescript": "^5.7.2"
}
}
diff --git a/readme.md b/readme.md
index ab5c00c..9d9b949 100755
--- a/readme.md
+++ b/readme.md
@@ -66,7 +66,7 @@
### 📦 Dependencies
-- astro v4.12+
+- astro v5.1+
- node v20.10+
- npm v10.2+
- tailwind v3.4+
diff --git a/src/content.config.ts b/src/content.config.ts
new file mode 100755
index 0000000..4247322
--- /dev/null
+++ b/src/content.config.ts
@@ -0,0 +1,163 @@
+import { glob } from "astro/loaders";
+import { defineCollection, z } from "astro:content";
+
+// Post collection schema
+const blogCollection = defineCollection({
+ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/blog" }),
+ schema: z.object({
+ title: z.string(),
+ meta_title: z.string().optional(),
+ description: z.string().optional(),
+ date: z.date().optional(),
+ image: z.string().optional(),
+ author: z.string().default("Admin"),
+ categories: z.array(z.string()).default(["others"]),
+ tags: z.array(z.string()).default(["others"]),
+ draft: z.boolean().optional(),
+ }),
+});
+
+// Author collection schema
+const authorsCollection = defineCollection({
+ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/authors" }),
+ schema: z.object({
+ title: z.string(),
+ meta_title: z.string().optional(),
+ email: z.string().optional(),
+ image: z.string().optional(),
+ description: z.string().optional(),
+ social: z
+ .array(
+ z
+ .object({
+ name: z.string().optional(),
+ icon: z.string().optional(),
+ link: z.string().optional(),
+ })
+ .optional(),
+ )
+ .optional(),
+ draft: z.boolean().optional(),
+ }),
+});
+
+// Pages collection schema
+const pagesCollection = defineCollection({
+ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/pages" }),
+ schema: z.object({
+ title: z.string(),
+ meta_title: z.string().optional(),
+ description: z.string().optional(),
+ image: z.string().optional(),
+ draft: z.boolean().optional(),
+ }),
+});
+
+// about collection schema
+const aboutCollection = defineCollection({
+ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/about" }),
+ schema: z.object({
+ title: z.string(),
+ meta_title: z.string().optional(),
+ description: z.string().optional(),
+ image: z.string().optional(),
+ draft: z.boolean().optional(),
+ }),
+});
+
+// contact collection schema
+const contactCollection = defineCollection({
+ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/contact" }),
+ schema: z.object({
+ title: z.string(),
+ meta_title: z.string().optional(),
+ description: z.string().optional(),
+ image: z.string().optional(),
+ draft: z.boolean().optional(),
+ }),
+});
+
+// Homepage collection schema
+const homepageCollection = defineCollection({
+ loader: glob({ pattern: "**/-*.{md,mdx}", base: "src/content/homepage" }),
+ schema: z.object({
+ banner: z.object({
+ title: z.string(),
+ content: z.string(),
+ image: z.string(),
+ button: z.object({
+ enable: z.boolean(),
+ label: z.string(),
+ link: z.string(),
+ }),
+ }),
+ features: z.array(
+ z.object({
+ title: z.string(),
+ image: z.string(),
+ content: z.string(),
+ bulletpoints: z.array(z.string()),
+ button: z.object({
+ enable: z.boolean(),
+ label: z.string(),
+ link: z.string(),
+ }),
+ }),
+ ),
+ }),
+});
+
+// Call to Action collection schema
+const ctaSectionCollection = defineCollection({
+ loader: glob({
+ pattern: "call-to-action.{md,mdx}",
+ base: "src/content/sections",
+ }),
+ schema: z.object({
+ enable: z.boolean(),
+ title: z.string(),
+ description: z.string(),
+ image: z.string(),
+ button: z.object({
+ enable: z.boolean(),
+ label: z.string(),
+ link: z.string(),
+ }),
+ }),
+});
+
+// Testimonials Section collection schema
+const testimonialSectionCollection = defineCollection({
+ loader: glob({
+ pattern: "testimonial.{md,mdx}",
+ base: "src/content/sections",
+ }),
+ schema: z.object({
+ enable: z.boolean(),
+ title: z.string(),
+ description: z.string(),
+ testimonials: z.array(
+ z.object({
+ name: z.string(),
+ avatar: z.string(),
+ designation: z.string(),
+ content: z.string(),
+ }),
+ ),
+ }),
+});
+
+// Export collections
+export const collections = {
+ // Pages
+ homepage: homepageCollection,
+ blog: blogCollection,
+ authors: authorsCollection,
+ pages: pagesCollection,
+ about: aboutCollection,
+ contact: contactCollection,
+
+ // sections
+ ctaSection: ctaSectionCollection,
+ testimonialSection: testimonialSectionCollection,
+};
diff --git a/src/content/config.ts b/src/content/config.ts
deleted file mode 100755
index 6b926a5..0000000
--- a/src/content/config.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { defineCollection, z } from "astro:content";
-
-// Post collection schema
-const blogCollection = defineCollection({
- schema: z.object({
- title: z.string(),
- meta_title: z.string().optional(),
- description: z.string().optional(),
- date: z.date().optional(),
- image: z.string().optional(),
- author: z.string().default("Admin"),
- categories: z.array(z.string()).default(["others"]),
- tags: z.array(z.string()).default(["others"]),
- draft: z.boolean().optional(),
- }),
-});
-
-// Author collection schema
-const authorsCollection = defineCollection({
- schema: z.object({
- title: z.string(),
- meta_title: z.string().optional(),
- email: z.string().optional(),
- image: z.string().optional(),
- description: z.string().optional(),
- social: z
- .array(
- z
- .object({
- name: z.string().optional(),
- icon: z.string().optional(),
- link: z.string().optional(),
- })
- .optional(),
- )
- .optional(),
- draft: z.boolean().optional(),
- }),
-});
-
-// Pages collection schema
-const pagesCollection = defineCollection({
- schema: z.object({
- title: z.string(),
- meta_title: z.string().optional(),
- description: z.string().optional(),
- image: z.string().optional(),
- draft: z.boolean().optional(),
- }),
-});
-
-// Export collections
-export const collections = {
- blog: blogCollection,
- authors: authorsCollection,
- pages: pagesCollection,
-};
diff --git a/src/env.d.ts b/src/env.d.ts
deleted file mode 100755
index acef35f..0000000
--- a/src/env.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-///
{plainify(data.body?.slice(0, 100))} diff --git a/src/layouts/components/BlogCard.astro b/src/layouts/components/BlogCard.astro index 268a532..7d1390b 100644 --- a/src/layouts/components/BlogCard.astro +++ b/src/layouts/components/BlogCard.astro @@ -27,7 +27,7 @@ const { title, image, date, author, categories } = data.data; ) }
{plainify(data.body?.slice(0, Number(summary_length)))}
- + read more diff --git a/src/lib/contentParser.astro b/src/lib/contentParser.astro index a6d1013..85685c8 100644 --- a/src/lib/contentParser.astro +++ b/src/lib/contentParser.astro @@ -6,7 +6,7 @@ import { } from "astro:content"; export const getSinglePage = async