PageSourceSearch

https://alwaysintune.netlify.app/assets/Blog-CB0SjTZm.js

js alwaysintune.netlify.app collected 2026-10-03 10:27:00 UTC 3,333 bytes, 1 lines download raw bytes

1import{_ as u}from"./index-CVuSjWCq.js";import{a as t,j as e}from"./query-vendor-BB0JUlq_.js";import{L as r}from"./react-vendor-BIjsaQ6L.js";import{S as x}from"./SEO-wcQthF5D.js";import{C as h}from"./calendar-BGqwoozq.js";import{U as g,E as p}from"./user-B99NGEGJ.js";import"./ui-vendor-CwH6wFZJ.js";function E(){const[a,i]=t.useState([]),[o,l]=t.useState(!0);t.useEffect(()=>{c()},[]);const c=async()=>{try{const{apiFetch:s}=await u(async()=>{const{apiFetch:m}=await import("./api-CyvozDRd.js");return{apiFetch:m}},[]),n=await s("/api/blog");i(Array.isArray(n)?n:[])}catch(s){console.error("Error loading blog posts:",s),i([])}finally{l(!1)}},d=s=>new Date(s).toLocaleDateString("en-GB",{day:"numeric",month:"long",year:"numeric"});return e.jsxs(e.Fragment,{children:[e.jsx(x,{title:"Music Education Blog | InTune Music | West Lothian",description:"Explore music education tips, lesson insights, and industry trends from InTune Music's expert instructors. Learn about guitar, piano, drums, singing and more.",keywords:"music blog, music education, guitar tips, piano lessons, drum tutorials, singing techniques, music theory, practice tips, InTune Music, West Lothian",url:"/blog"}),e.jsx("div",{className:"container mx-auto py-12 px-4",children:e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsxs("div",{className:"text-center mb-12",children:[e.jsx("h1",{className:"text-4xl md:text-5xl font-bold mb-4",children:"Music Education Blog"}),e.jsx("p",{className:"text-lg text-muted-foreground",children:"Tips, insights, and inspiration from InTune Music's expert instructors"})]}),o?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto"}),e.jsx("p",{className:"mt-4 text-muted-foreground",children:"Loading posts..."})]}):a.length===0?e.jsx("div",{className:"text-center py-12 border rounded-lg bg-muted/30",children:e.jsx("p",{className:"text-lg text-muted-foreground",children:"No blog posts published yet. Check back soon!"})}):e.jsx("div",{className:"space-y-8",children:a.map(s=>e.jsxs("article",{className:"border rounded-lg overflow-hidden hover:shadow-lg transition-shadow bg-card",children:[s.featured_image&&e.jsx(r,{to:`/blog/${s.slug}`,children:e.jsx("img",{src:s.featured_image,alt:s.title,className:"w-full h-64 object-cover hover:opacity-90 transition-opacity"})}),e.jsxs("div",{className:"p-6",children:[e.jsx(r,{to:`/blog/${s.slug}`,children:e.jsx("h2",{className:"text-2xl font-bold mb-3 hover:text-primary transition-colors",children:s.title})}),e.jsxs("div",{className:"flex flex-wrap gap-4 text-sm text-muted-foreground mb-4",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(h,{className:"h-4 w-4"}),e.jsx("span",{children:d(s.published_at)})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(g,{className:"h-4 w-4"}),e.jsx("span",{children:s.author_name})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(p,{className:"h-4 w-4"}),e.jsxs("span",{children:[s.views," views"]})]})]}),s.excerpt&&e.jsx("p",{className:"text-muted-foreground mb-4",children:s.excerpt}),e.jsx(r,{to:`/blog/${s.slug}`,className:"inline-flex items-center text-primary font-medium hover:underline",children:"Read more →"})]})]},s.id))})]})})]})}export{E as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.