[{"data":1,"prerenderedAt":1572},["Reactive",2],{"posts-en-cms":3},[4,926],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"locale":11,"draft":7,"date":12,"image":13,"tags":16,"imageLogo":19,"imageLogo2":24,"seoImage":28,"body":30,"_type":921,"_id":922,"_source":923,"_file":924,"_extension":925},"/en/blog/payload","blog",false,"","Payload CMS – Lessons from Hostcraft","A code-first CMS built on Next.js: a modern interface, flexibility and AI compatibility – but also server requirements, deployment and the dependency on Next.js","en","2026-09-25T00:00:00.000Z",{"src":14,"alt":15},"/background/background-7.svg","background",[17,18],"tools","cms",{"src":20,"alt":21,"width":22,"left":23},"/logo/payload.svg","payload-logo","45%","10%",{"src":25,"alt":26,"width":27,"right":23},"/logo/payload-icon.svg","payload-icon","20%",{"src":29},"/payload.jpg",{"type":31,"children":32,"toc":905},"root",[33,70,77,82,87,96,102,109,123,128,134,139,202,207,476,497,502,508,513,534,548,554,559,565,571,576,620,633,639,644,756,761,767,788,821,826,832,855,860,878,883,889,894,899],{"type":34,"tag":35,"props":36,"children":37},"element","p",{},[38,41,51,53,60,62,68],{"type":39,"value":40},"text","I used ",{"type":34,"tag":42,"props":43,"children":48},"a",{"href":44,":target":45,"rel":46},"https://payloadcms.com/","\\_blank",[47],"nofollow",[49],{"type":39,"value":50},"Payload",{"type":39,"value":52}," for ",{"type":34,"tag":42,"props":54,"children":57},{"href":55,":target":45,"rel":56},"https://hostcraft.rentals",[47],[58],{"type":39,"value":59},"Hostcraft",{"type":39,"value":61},", a SaaS app that gives holiday hosts their own booking website (more in the ",{"type":34,"tag":42,"props":63,"children":65},{"href":64},"/en/hostcraft",[66],{"type":39,"value":67},"case study",{"type":39,"value":69},"). Payload 3 runs there together with Next.js 16 and Postgres. Time for an honest review.",{"type":34,"tag":71,"props":72,"children":74},"h2",{"id":73},"what-is-payload",[75],{"type":39,"value":76},"What is Payload?",{"type":34,"tag":35,"props":78,"children":79},{},[80],{"type":39,"value":81},"Payload is an open-source CMS (MIT licence) that is configured entirely in TypeScript. Collections, fields, access rules and hooks aren't clicked together in a back end but defined as code in the project. From this configuration Payload automatically generates the admin panel, a REST and GraphQL API and a typed Local API for direct access from the server.",{"type":34,"tag":35,"props":83,"children":84},{},[85],{"type":39,"value":86},"Since version 3, Payload is no longer a separate server but is installed directly into a Next.js app. Admin panel, API and front end live in the same project and the same process. Postgres, MongoDB and SQLite are available as databases; Hostcraft uses Postgres.",{"type":34,"tag":35,"props":88,"children":89},{},[90],{"type":34,"tag":91,"props":92,"children":95},"img",{"alt":93,"src":94},"The Payload admin panel in Hostcraft","/images/blog/payload.webp",[],{"type":34,"tag":71,"props":97,"children":99},{"id":98},"advantages",[100],{"type":39,"value":101},"Advantages",{"type":34,"tag":103,"props":104,"children":106},"h3",{"id":105},"modern-interface",[107],{"type":39,"value":108},"Modern interface",{"type":34,"tag":35,"props":110,"children":111},{},[112,114,121],{"type":39,"value":113},"The admin panel is fast and tidy, and comes with dark mode, tabs, relationship fields, a media library, versions and multilingual content. In Hostcraft, many texts can be maintained per language (German, English, Croatian). A ",{"type":34,"tag":115,"props":116,"children":118},"code",{"className":117},[],[119],{"type":39,"value":120},"localized: true",{"type":39,"value":122}," on the field is enough, and the language switcher appears in the back end automatically.",{"type":34,"tag":35,"props":124,"children":125},{},[126],{"type":39,"value":127},"The interface comes from the configuration, so there is no separate admin code to maintain. New fields show up in the back end immediately.",{"type":34,"tag":103,"props":129,"children":131},{"id":130},"flexibility",[132],{"type":39,"value":133},"Flexibility",{"type":34,"tag":35,"props":135,"children":136},{},[137],{"type":39,"value":138},"Payload hardly prescribes any structure. You build the content models yourself, and everything can be extended:",{"type":34,"tag":140,"props":141,"children":142},"ul",{},[143,162,172,182,192],{"type":34,"tag":144,"props":145,"children":146},"li",{},[147,153,155,160],{"type":34,"tag":148,"props":149,"children":150},"strong",{},[151],{"type":39,"value":152},"Collections",{"type":39,"value":154}," and ",{"type":34,"tag":148,"props":156,"children":157},{},[158],{"type":39,"value":159},"fields",{"type":39,"value":161}," (groups, tabs, relations, selects, uploads …)",{"type":34,"tag":144,"props":163,"children":164},{},[165,170],{"type":34,"tag":148,"props":166,"children":167},{},[168],{"type":39,"value":169},"Access control",{"type":39,"value":171}," at collection and field level, including filters per user",{"type":34,"tag":144,"props":173,"children":174},{},[175,180],{"type":34,"tag":148,"props":176,"children":177},{},[178],{"type":39,"value":179},"Hooks",{"type":39,"value":181}," that run before and after saving",{"type":34,"tag":144,"props":183,"children":184},{},[185,190],{"type":34,"tag":148,"props":186,"children":187},{},[188],{"type":39,"value":189},"Custom React components",{"type":39,"value":191}," in the admin panel, for example dashboards or entirely custom views",{"type":34,"tag":144,"props":193,"children":194},{},[195,200],{"type":34,"tag":148,"props":196,"children":197},{},[198],{"type":39,"value":199},"Auth",{"type":39,"value":201}," with roles, lockout after failed attempts and password reset, built in",{"type":34,"tag":35,"props":203,"children":204},{},[205],{"type":39,"value":206},"In Hostcraft, every host can only access their own accommodations, websites and bookings. That isn't custom permission logic, just a few lines of access control:",{"type":34,"tag":208,"props":209,"children":213},"pre",{"className":210,"code":211,"language":212,"meta":8,"style":8},"language-ts shiki shiki-themes dracula","export const ownSiteOrOperator: Access = ({ req: { user } }) => {\n  if (!user) return false\n  if (isOperator(user)) return true\n\n  const hostId = getUserHostId(user)\n  if (!hostId) return false\n\n  // Hosts only see sites that belong to them\n  return { host: { equals: hostId } }\n}\n","ts",[214],{"type":34,"tag":115,"props":215,"children":216},{"__ignoreMap":8},[217,283,318,349,359,388,417,425,435,467],{"type":34,"tag":218,"props":219,"children":222},"span",{"class":220,"line":221},"line",1,[223,229,234,240,245,251,256,262,268,273,278],{"type":34,"tag":218,"props":224,"children":226},{"style":225},"--shiki-default:#FF79C6",[227],{"type":39,"value":228},"export",{"type":34,"tag":218,"props":230,"children":231},{"style":225},[232],{"type":39,"value":233}," const",{"type":34,"tag":218,"props":235,"children":237},{"style":236},"--shiki-default:#50FA7B",[238],{"type":39,"value":239}," ownSiteOrOperator",{"type":34,"tag":218,"props":241,"children":242},{"style":225},[243],{"type":39,"value":244},":",{"type":34,"tag":218,"props":246,"children":248},{"style":247},"--shiki-default:#8BE9FD;--shiki-default-font-style:italic",[249],{"type":39,"value":250}," Access",{"type":34,"tag":218,"props":252,"children":253},{"style":225},[254],{"type":39,"value":255}," =",{"type":34,"tag":218,"props":257,"children":259},{"style":258},"--shiki-default:#F8F8F2",[260],{"type":39,"value":261}," ({ req: { ",{"type":34,"tag":218,"props":263,"children":265},{"style":264},"--shiki-default:#FFB86C;--shiki-default-font-style:italic",[266],{"type":39,"value":267},"user",{"type":34,"tag":218,"props":269,"children":270},{"style":258},[271],{"type":39,"value":272}," } }) ",{"type":34,"tag":218,"props":274,"children":275},{"style":225},[276],{"type":39,"value":277},"=>",{"type":34,"tag":218,"props":279,"children":280},{"style":258},[281],{"type":39,"value":282}," {\n",{"type":34,"tag":218,"props":284,"children":286},{"class":220,"line":285},2,[287,292,297,302,307,312],{"type":34,"tag":218,"props":288,"children":289},{"style":225},[290],{"type":39,"value":291},"  if",{"type":34,"tag":218,"props":293,"children":294},{"style":258},[295],{"type":39,"value":296}," (",{"type":34,"tag":218,"props":298,"children":299},{"style":225},[300],{"type":39,"value":301},"!",{"type":34,"tag":218,"props":303,"children":304},{"style":258},[305],{"type":39,"value":306},"user) ",{"type":34,"tag":218,"props":308,"children":309},{"style":225},[310],{"type":39,"value":311},"return",{"type":34,"tag":218,"props":313,"children":315},{"style":314},"--shiki-default:#BD93F9",[316],{"type":39,"value":317}," false\n",{"type":34,"tag":218,"props":319,"children":321},{"class":220,"line":320},3,[322,326,330,335,340,344],{"type":34,"tag":218,"props":323,"children":324},{"style":225},[325],{"type":39,"value":291},{"type":34,"tag":218,"props":327,"children":328},{"style":258},[329],{"type":39,"value":296},{"type":34,"tag":218,"props":331,"children":332},{"style":236},[333],{"type":39,"value":334},"isOperator",{"type":34,"tag":218,"props":336,"children":337},{"style":258},[338],{"type":39,"value":339},"(user)) ",{"type":34,"tag":218,"props":341,"children":342},{"style":225},[343],{"type":39,"value":311},{"type":34,"tag":218,"props":345,"children":346},{"style":314},[347],{"type":39,"value":348}," true\n",{"type":34,"tag":218,"props":350,"children":352},{"class":220,"line":351},4,[353],{"type":34,"tag":218,"props":354,"children":356},{"emptyLinePlaceholder":355},true,[357],{"type":39,"value":358},"\n",{"type":34,"tag":218,"props":360,"children":362},{"class":220,"line":361},5,[363,368,373,378,383],{"type":34,"tag":218,"props":364,"children":365},{"style":225},[366],{"type":39,"value":367},"  const",{"type":34,"tag":218,"props":369,"children":370},{"style":258},[371],{"type":39,"value":372}," hostId ",{"type":34,"tag":218,"props":374,"children":375},{"style":225},[376],{"type":39,"value":377},"=",{"type":34,"tag":218,"props":379,"children":380},{"style":236},[381],{"type":39,"value":382}," getUserHostId",{"type":34,"tag":218,"props":384,"children":385},{"style":258},[386],{"type":39,"value":387},"(user)\n",{"type":34,"tag":218,"props":389,"children":391},{"class":220,"line":390},6,[392,396,400,404,409,413],{"type":34,"tag":218,"props":393,"children":394},{"style":225},[395],{"type":39,"value":291},{"type":34,"tag":218,"props":397,"children":398},{"style":258},[399],{"type":39,"value":296},{"type":34,"tag":218,"props":401,"children":402},{"style":225},[403],{"type":39,"value":301},{"type":34,"tag":218,"props":405,"children":406},{"style":258},[407],{"type":39,"value":408},"hostId) ",{"type":34,"tag":218,"props":410,"children":411},{"style":225},[412],{"type":39,"value":311},{"type":34,"tag":218,"props":414,"children":415},{"style":314},[416],{"type":39,"value":317},{"type":34,"tag":218,"props":418,"children":420},{"class":220,"line":419},7,[421],{"type":34,"tag":218,"props":422,"children":423},{"emptyLinePlaceholder":355},[424],{"type":39,"value":358},{"type":34,"tag":218,"props":426,"children":428},{"class":220,"line":427},8,[429],{"type":34,"tag":218,"props":430,"children":432},{"style":431},"--shiki-default:#6272A4",[433],{"type":39,"value":434},"  // Hosts only see sites that belong to them\n",{"type":34,"tag":218,"props":436,"children":438},{"class":220,"line":437},9,[439,444,449,453,458,462],{"type":34,"tag":218,"props":440,"children":441},{"style":225},[442],{"type":39,"value":443},"  return",{"type":34,"tag":218,"props":445,"children":446},{"style":258},[447],{"type":39,"value":448}," { host",{"type":34,"tag":218,"props":450,"children":451},{"style":225},[452],{"type":39,"value":244},{"type":34,"tag":218,"props":454,"children":455},{"style":258},[456],{"type":39,"value":457}," { equals",{"type":34,"tag":218,"props":459,"children":460},{"style":225},[461],{"type":39,"value":244},{"type":34,"tag":218,"props":463,"children":464},{"style":258},[465],{"type":39,"value":466}," hostId } }\n",{"type":34,"tag":218,"props":468,"children":470},{"class":220,"line":469},10,[471],{"type":34,"tag":218,"props":472,"children":473},{"style":258},[474],{"type":39,"value":475},"}\n",{"type":34,"tag":35,"props":477,"children":478},{},[479,481,487,489,495],{"type":39,"value":480},"The function returns either ",{"type":34,"tag":115,"props":482,"children":484},{"className":483},[],[485],{"type":39,"value":486},"true",{"type":39,"value":488},"/",{"type":34,"tag":115,"props":490,"children":492},{"className":491},[],[493],{"type":39,"value":494},"false",{"type":39,"value":496}," or a filter that Payload applies directly to the database query. For a multi-tenant system like Hostcraft this is very practical.",{"type":34,"tag":35,"props":498,"children":499},{},[500],{"type":39,"value":501},"Because the Local API can also be used outside the admin panel, Payload and the app itself aren't separate. The public front end, the host dashboard and the booking logic read from and write to the same collections. I only use the admin panel as the operator. Hosts get their own, simpler dashboard that I built myself.",{"type":34,"tag":103,"props":503,"children":505},{"id":504},"ai-compatibility",[506],{"type":39,"value":507},"AI compatibility",{"type":34,"tag":35,"props":509,"children":510},{},[511],{"type":39,"value":512},"The code-first approach convinced me here, too. The entire data model lives in TypeScript files in the repository. An AI assistant in the editor sees collections, fields, access control and hooks without having to operate a back end or inspect a database. New fields, collections or permissions can be added via prompt, and everything is traceable as a Git diff.",{"type":34,"tag":35,"props":514,"children":515},{},[516,518,524,526,532],{"type":39,"value":517},"On top of that there is ",{"type":34,"tag":115,"props":519,"children":521},{"className":520},[],[522],{"type":39,"value":523},"payload generate:types",{"type":39,"value":525},": the configuration produces a ",{"type":34,"tag":115,"props":527,"children":529},{"className":528},[],[530],{"type":39,"value":531},"payload-types.ts",{"type":39,"value":533}," with all types. The assistant gets precise feedback from the TypeScript compiler when it uses a field incorrectly. That is a big difference from CMS systems where the schema lives somewhere in the database.",{"type":34,"tag":35,"props":535,"children":536},{},[537,539,546],{"type":39,"value":538},"There is also an official ",{"type":34,"tag":42,"props":540,"children":543},{"href":541,":target":45,"rel":542},"https://payloadcms.com/docs/plugins/mcp",[47],[544],{"type":39,"value":545},"MCP plugin",{"type":39,"value":547}," that lets AI clients read and create content, respecting access control of course. I haven't tried it yet, but it's a good sign that Payload is taking this direction seriously.",{"type":34,"tag":103,"props":549,"children":551},{"id":550},"free-with-no-licence-model",[552],{"type":39,"value":553},"Free, with no licence model",{"type":34,"tag":35,"props":555,"children":556},{},[557],{"type":39,"value":558},"Payload is MIT-licensed. There is no Pro version, no per-site price and no limit to one user. For a SaaS product where many hosts work on the same installation, that is a real argument.",{"type":34,"tag":71,"props":560,"children":562},{"id":561},"disadvantages",[563],{"type":39,"value":564},"Disadvantages",{"type":34,"tag":103,"props":566,"children":568},{"id":567},"server-requirements",[569],{"type":39,"value":570},"Server requirements",{"type":34,"tag":35,"props":572,"children":573},{},[574],{"type":39,"value":575},"Payload is neither a static site nor a classic PHP CMS. It needs a permanently running Node.js process and a database. Cheap shared hosting is out; a VPS (for Hostcraft a server at Hetzner) is the minimum.",{"type":34,"tag":140,"props":577,"children":578},{},[579,584,589,594,607],{"type":34,"tag":144,"props":580,"children":581},{},[582],{"type":39,"value":583},"Node.js 22, with pm2 as process manager in my case",{"type":34,"tag":144,"props":585,"children":586},{},[587],{"type":39,"value":588},"Postgres (or MongoDB or SQLite)",{"type":34,"tag":144,"props":590,"children":591},{},[592],{"type":39,"value":593},"A reverse proxy that handles SSL",{"type":34,"tag":144,"props":595,"children":596},{},[597,599,605],{"type":39,"value":598},"Enough memory for ",{"type":34,"tag":115,"props":600,"children":602},{"className":601},[],[603],{"type":39,"value":604},"next build",{"type":39,"value":606},", since I build on the server and the admin panel adds to the build",{"type":34,"tag":144,"props":608,"children":609},{},[610,612,618],{"type":39,"value":611},"Persistent storage for uploaded files (a ",{"type":34,"tag":115,"props":613,"children":615},{"className":614},[],[616],{"type":39,"value":617},"media/",{"type":39,"value":619}," folder in my case), unless you connect S3 storage",{"type":34,"tag":35,"props":621,"children":622},{},[623,625,631],{"type":39,"value":624},"Local setup is also more effort than for a Markdown-based site. I start Postgres in a container, and the ",{"type":34,"tag":115,"props":626,"children":628},{"className":627},[],[629],{"type":39,"value":630},"node_modules",{"type":39,"value":632}," alone are around 2 GB. For a small brochure site Payload is therefore overkill.",{"type":34,"tag":103,"props":634,"children":636},{"id":635},"deployment-a-conditional-disadvantage",[637],{"type":39,"value":638},"Deployment – a conditional disadvantage",{"type":34,"tag":35,"props":640,"children":641},{},[642],{"type":39,"value":643},"In day-to-day use, deployment runs via GitHub Actions for me: fetch the code, install dependencies, back up the database, run migrations, build, reload the process. That isn't a Payload-specific problem but normal for a Node app with a database. Still, there are points worth knowing:",{"type":34,"tag":140,"props":645,"children":646},{},[647,672,705,730],{"type":34,"tag":144,"props":648,"children":649},{},[650,655,657,663,664,670],{"type":34,"tag":148,"props":651,"children":652},{},[653],{"type":39,"value":654},"Schema push vs. migrations:",{"type":39,"value":656}," In development mode Payload syncs the database with the configuration automatically. Production needs real migrations (",{"type":34,"tag":115,"props":658,"children":660},{"className":659},[],[661],{"type":39,"value":662},"payload migrate:create",{"type":39,"value":154},{"type":34,"tag":115,"props":665,"children":667},{"className":666},[],[668],{"type":39,"value":669},"payload migrate",{"type":39,"value":671},"). If you forget, you only notice at deploy time.",{"type":34,"tag":144,"props":673,"children":674},{},[675,680,682,688,690,696,698,703],{"type":34,"tag":148,"props":676,"children":677},{},[678],{"type":39,"value":679},"The marker from the dev push:",{"type":39,"value":681}," The local push leaves an entry in ",{"type":34,"tag":115,"props":683,"children":685},{"className":684},[],[686],{"type":39,"value":687},"payload_migrations",{"type":39,"value":689}," (with ",{"type":34,"tag":115,"props":691,"children":693},{"className":692},[],[694],{"type":39,"value":695},"batch = -1",{"type":39,"value":697},"). After that, ",{"type":34,"tag":115,"props":699,"children":701},{"className":700},[],[702],{"type":39,"value":669},{"type":39,"value":704}," asks for interactive confirmation and hangs in an SSH deploy until the timeout hits. My deploy script removes this entry before migrating.",{"type":34,"tag":144,"props":706,"children":707},{},[708,713,715,720,722,728],{"type":34,"tag":148,"props":709,"children":710},{},[711],{"type":39,"value":712},"Content belongs to the database:",{"type":39,"value":714}," Unlike a flat-file CMS, content can't be moved via Git. For the initial launch I have a script that backs up the database and the ",{"type":34,"tag":115,"props":716,"children":718},{"className":717},[],[719],{"type":39,"value":617},{"type":39,"value":721}," folder locally and transfers them to the server. Git revision and ",{"type":34,"tag":115,"props":723,"children":725},{"className":724},[],[726],{"type":39,"value":727},"PAYLOAD_SECRET",{"type":39,"value":729}," have to match for that.",{"type":34,"tag":144,"props":731,"children":732},{},[733,738,740,746,748,754],{"type":34,"tag":148,"props":734,"children":735},{},[736],{"type":39,"value":737},"Content Security Policy:",{"type":39,"value":739}," In production the admin panel needs ",{"type":34,"tag":115,"props":741,"children":743},{"className":742},[],[744],{"type":39,"value":745},"unsafe-eval",{"type":39,"value":747},". The strict CSP of the public site therefore has to be configured separately for ",{"type":34,"tag":115,"props":749,"children":751},{"className":750},[],[752],{"type":39,"value":753},"/admin",{"type":39,"value":755},".",{"type":34,"tag":35,"props":757,"children":758},{},[759],{"type":39,"value":760},"Once set up cleanly, it runs reliably. New projects should plan for migrations from the start rather than just before the first release.",{"type":34,"tag":103,"props":762,"children":764},{"id":763},"dependency-on-nextjs",[765],{"type":39,"value":766},"Dependency on Next.js",{"type":34,"tag":35,"props":768,"children":769},{},[770,772,778,780,786],{"type":39,"value":771},"Payload 3 is tightly interwoven with Next.js. The admin panel is a Next app, the configuration is hooked in through ",{"type":34,"tag":115,"props":773,"children":775},{"className":774},[],[776],{"type":39,"value":777},"withPayload",{"type":39,"value":779}," in ",{"type":34,"tag":115,"props":781,"children":783},{"className":782},[],[784],{"type":39,"value":785},"next.config.ts",{"type":39,"value":787},", and the Payload and Next versions have to match. As a result:",{"type":34,"tag":140,"props":789,"children":790},{},[791,801,811],{"type":34,"tag":144,"props":792,"children":793},{},[794,799],{"type":34,"tag":148,"props":795,"children":796},{},[797],{"type":39,"value":798},"Next updates and Payload updates have to fit together.",{"type":39,"value":800}," Next regularly ships breaking changes, and Payload releases new versions very frequently. Updates should be planned deliberately.",{"type":34,"tag":144,"props":802,"children":803},{},[804,809],{"type":34,"tag":148,"props":805,"children":806},{},[807],{"type":39,"value":808},"React is mandatory.",{"type":39,"value":810}," If you otherwise use Vue and Nuxt, like I do for most projects, you can use Payload headless, but you still run a Next app just for the back end.",{"type":34,"tag":144,"props":812,"children":813},{},[814,819],{"type":34,"tag":148,"props":815,"children":816},{},[817],{"type":39,"value":818},"The lock-in is noticeable.",{"type":39,"value":820}," The Local API and the admin components are closely tied to the Next app. Switching the front end later is possible, but not trivial.",{"type":34,"tag":35,"props":822,"children":823},{},[824],{"type":39,"value":825},"If you work with Next.js anyway, you get almost only advantages: one repository, one deployment, shared types.",{"type":34,"tag":103,"props":827,"children":829},{"id":828},"uncertainty-after-the-figma-acquisition",[830],{"type":39,"value":831},"Uncertainty after the Figma acquisition",{"type":34,"tag":35,"props":833,"children":834},{},[835,837,844,846,853],{"type":39,"value":836},"In June 2025 Figma acquired the Payload team (",{"type":34,"tag":42,"props":838,"children":841},{"href":839,":target":45,"rel":840},"https://www.figma.com/blog/payload-joins-figma/",[47],[842],{"type":39,"value":843},"announcement by Figma",{"type":39,"value":845},", ",{"type":34,"tag":42,"props":847,"children":850},{"href":848,":target":45,"rel":849},"https://payloadcms.com/posts/blog/payload-is-joining-figma",[47],[851],{"type":39,"value":852},"announcement by Payload",{"type":39,"value":854},"). Both sides promise that Payload stays open source and self-hostable, that the team keeps working on Payload, and that nothing changes for existing users for now.",{"type":34,"tag":35,"props":856,"children":857},{},[858],{"type":39,"value":859},"That's reassuring, but \"for now\" is the key phrase. Figma is building its own CMS, and Payload is meant to provide the foundation for it. Payload's roadmap will therefore also depend on the interests of a large company, which is hard to judge from the outside:",{"type":34,"tag":140,"props":861,"children":862},{},[863,868,873],{"type":34,"tag":144,"props":864,"children":865},{},[866],{"type":39,"value":867},"Will Figma keep developing the open-source core, or will the focus shift to commercial products?",{"type":34,"tag":144,"props":869,"children":870},{},[871],{"type":39,"value":872},"Will the MIT licence remain in place in the long run?",{"type":34,"tag":144,"props":874,"children":875},{},[876],{"type":39,"value":877},"How long will the features I use today keep being developed in the core?",{"type":34,"tag":35,"props":879,"children":880},{},[881],{"type":39,"value":882},"So far there is no reason to panic, as the core is still MIT-licensed and actively maintained. Still, you should factor this uncertainty in when choosing a CMS for a long-lived project. The risk is manageable because the data sits in Postgres and the configuration in TypeScript, so both can be reused without Payload if needed. A switch would still take effort, though.",{"type":34,"tag":71,"props":884,"children":886},{"id":885},"conclusion",[887],{"type":39,"value":888},"Conclusion",{"type":34,"tag":35,"props":890,"children":891},{},[892],{"type":39,"value":893},"For me, Payload is the CMS that fits Next.js projects best, and I'd use it again for web apps with real logic, user roles and multiple tenants. The admin panel is modern, the data model can be shaped freely, and because everything lives in TypeScript, working with AI assistants is excellent.",{"type":34,"tag":35,"props":895,"children":896},{},[897],{"type":39,"value":898},"The disadvantages are manageable but real: a server of your own with Node.js and a database, a deployment with clean migrations, the close tie to Next.js, and the open question of where Payload is heading under Figma. For simple sites where editors only change a few texts, there are lighter solutions. For a product like Hostcraft, Payload was the right choice.",{"type":34,"tag":900,"props":901,"children":902},"style",{},[903],{"type":39,"value":904},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":8,"searchDepth":285,"depth":285,"links":906},[907,908,914,920],{"id":73,"depth":285,"text":76},{"id":98,"depth":285,"text":101,"children":909},[910,911,912,913],{"id":105,"depth":320,"text":108},{"id":130,"depth":320,"text":133},{"id":504,"depth":320,"text":507},{"id":550,"depth":320,"text":553},{"id":561,"depth":285,"text":564,"children":915},[916,917,918,919],{"id":567,"depth":320,"text":570},{"id":635,"depth":320,"text":638},{"id":763,"depth":320,"text":766},{"id":828,"depth":320,"text":831},{"id":885,"depth":285,"text":888},"markdown","content:en:blog:payload.md","content","en/blog/payload.md","md",{"_path":927,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":928,"description":929,"locale":11,"draft":7,"date":930,"image":931,"tags":933,"imageLogo":934,"imageLogo2":938,"seoImage":942,"body":944,"_type":921,"_id":1570,"_source":923,"_file":1571,"_extension":925},"/en/blog/statamic","Statamic CMS – Lessons from Two Projects","A flat-file CMS built on Laravel: Git integration, a modern interface and AI compatibility – but also price, caching and server requirements","2026-10-09T00:00:00.000Z",{"src":932,"alt":15},"/background/background-5.svg",[17,18],{"src":935,"alt":936,"width":937,"left":23},"/logo/statamic.svg","statamic-logo","30%",{"src":939,"alt":940,"width":941,"right":23},"/logo/git.svg","git-logo","15%",{"src":943},"/images/blog/statamic.webp",{"type":31,"children":945,"toc":1553},[946,960,966,971,976,983,987,993,1006,1011,1015,1028,1033,1037,1042,1100,1105,1111,1116,1228,1248,1252,1264,1268,1274,1293,1298,1304,1316,1343,1347,1352,1398,1426,1430,1443,1530,1535,1539,1544,1549],{"type":34,"tag":35,"props":947,"children":948},{},[949,951,958],{"type":39,"value":950},"I've now used ",{"type":34,"tag":42,"props":952,"children":955},{":target":45,"href":953,"rel":954},"https://statamic.com/",[47],[956],{"type":39,"value":957},"Statamic",{"type":39,"value":959}," in two client projects: a conference website with programme, speakers and exhibitors, and the site of a network organisation with events, locations and articles. Both run on Statamic 6 and Laravel 13. Time for an honest interim review.",{"type":34,"tag":71,"props":961,"children":963},{"id":962},"what-is-statamic",[964],{"type":39,"value":965},"What is Statamic?",{"type":34,"tag":35,"props":967,"children":968},{},[969],{"type":39,"value":970},"Statamic is a content management system built on Laravel. At its core it is a so-called flat-file CMS: content isn't stored in a database but as Markdown and YAML files right in the project directory. On top of that comes a Control Panel (the backend) where editors manage content without ever touching a file.",{"type":34,"tag":35,"props":972,"children":973},{},[974],{"type":39,"value":975},"The frontend is built with the Antlers template language or with Blade. Statamic can also be run headless.",{"type":34,"tag":35,"props":977,"children":978},{},[979],{"type":34,"tag":91,"props":980,"children":982},{"alt":981,"src":943},"The Statamic Control Panel",[],{"type":34,"tag":71,"props":984,"children":985},{"id":98},[986],{"type":39,"value":101},{"type":34,"tag":103,"props":988,"children":990},{"id":989},"git-integration",[991],{"type":39,"value":992},"Git integration",{"type":34,"tag":35,"props":994,"children":995},{},[996,998,1004],{"type":39,"value":997},"Since all content is stored in files, the entire project can be versioned in Git – code, templates, field definitions ",{"type":34,"tag":999,"props":1000,"children":1001},"em",{},[1002],{"type":39,"value":1003},"and",{"type":39,"value":1005}," content. That's a real difference to WordPress & co., where content lives in the database and has to be painstakingly synchronised between your local environment and the server.",{"type":34,"tag":35,"props":1007,"children":1008},{},[1009],{"type":39,"value":1010},"With the Pro edition, Statamic can even commit and push changes made in the backend automatically. An editor saves an entry, and shortly afterwards the commit shows up in the repository. Every change is traceable and can be rolled back if needed.",{"type":34,"tag":103,"props":1012,"children":1013},{"id":105},[1014],{"type":39,"value":108},{"type":34,"tag":35,"props":1016,"children":1017},{},[1018,1020,1026],{"type":39,"value":1019},"Since version 6 the Control Panel has been completely redesigned and feels very modern: fast, tidy, with dark mode, live preview and a global search (",{"type":34,"tag":115,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":39,"value":1025},"Ctrl + K",{"type":39,"value":1027},"). Fields are defined in blueprints and organised into tabs and sections. That way the backend looks exactly the way the project needs it for each content type – nothing more, nothing less.",{"type":34,"tag":35,"props":1029,"children":1030},{},[1031],{"type":39,"value":1032},"For clients this was a big plus. Onboarding took much less time than I'm used to with other systems.",{"type":34,"tag":103,"props":1034,"children":1035},{"id":130},[1036],{"type":39,"value":133},{"type":34,"tag":35,"props":1038,"children":1039},{},[1040],{"type":39,"value":1041},"Statamic doesn't force a structure on you. You build your content models yourself:",{"type":34,"tag":140,"props":1043,"children":1044},{},[1045,1054,1070,1090],{"type":34,"tag":144,"props":1046,"children":1047},{},[1048,1052],{"type":34,"tag":148,"props":1049,"children":1050},{},[1051],{"type":39,"value":152},{"type":39,"value":1053}," for pages, news, events, speakers …",{"type":34,"tag":144,"props":1055,"children":1056},{},[1057,1062,1063,1068],{"type":34,"tag":148,"props":1058,"children":1059},{},[1060],{"type":39,"value":1061},"Blueprints",{"type":39,"value":154},{"type":34,"tag":148,"props":1064,"children":1065},{},[1066],{"type":39,"value":1067},"fieldsets",{"type":39,"value":1069}," for the fields, including Replicator/Bard/Grid for flexible page building blocks",{"type":34,"tag":144,"props":1071,"children":1072},{},[1073,1078,1079,1084,1085],{"type":34,"tag":148,"props":1074,"children":1075},{},[1076],{"type":39,"value":1077},"Taxonomies",{"type":39,"value":845},{"type":34,"tag":148,"props":1080,"children":1081},{},[1082],{"type":39,"value":1083},"globals",{"type":39,"value":154},{"type":34,"tag":148,"props":1086,"children":1087},{},[1088],{"type":39,"value":1089},"navigations",{"type":34,"tag":144,"props":1091,"children":1092},{},[1093,1098],{"type":34,"tag":148,"props":1094,"children":1095},{},[1096],{"type":39,"value":1097},"Roles and permissions",{"type":39,"value":1099},", for example \"Content Editor\" and \"Site Manager\" with precisely defined rights",{"type":34,"tag":35,"props":1101,"children":1102},{},[1103],{"type":39,"value":1104},"Because it's Laravel, everything can be extended: custom controllers, commands, scheduler (for us: importing external API data), queues and addons. If something is missing, you just write it in PHP.",{"type":34,"tag":103,"props":1106,"children":1108},{"id":1107},"flat-file-cms",[1109],{"type":39,"value":1110},"Flat-file CMS",{"type":34,"tag":35,"props":1112,"children":1113},{},[1114],{"type":39,"value":1115},"No database means no database server, no dumps, no migration headaches between staging and production. An entry looks like this:",{"type":34,"tag":208,"props":1117,"children":1121},{"className":1118,"code":1119,"language":1120,"meta":8,"style":8},"language-yaml shiki shiki-themes dracula","---\nid: 6f0c4a1e-0000-0000-0000-000000000000\ntitle: Opening keynote\npublished: true\nstart: '2026-10-09 10:00'\n---\nThe content goes here as plain **Markdown**.\n","yaml",[1122],{"type":34,"tag":115,"props":1123,"children":1124},{"__ignoreMap":8},[1125,1133,1152,1169,1185,1213,1220],{"type":34,"tag":218,"props":1126,"children":1127},{"class":220,"line":221},[1128],{"type":34,"tag":218,"props":1129,"children":1130},{"style":258},[1131],{"type":39,"value":1132},"---\n",{"type":34,"tag":218,"props":1134,"children":1135},{"class":220,"line":285},[1136,1142,1146],{"type":34,"tag":218,"props":1137,"children":1139},{"style":1138},"--shiki-default:#8BE9FD",[1140],{"type":39,"value":1141},"id",{"type":34,"tag":218,"props":1143,"children":1144},{"style":225},[1145],{"type":39,"value":244},{"type":34,"tag":218,"props":1147,"children":1149},{"style":1148},"--shiki-default:#F1FA8C",[1150],{"type":39,"value":1151}," 6f0c4a1e-0000-0000-0000-000000000000\n",{"type":34,"tag":218,"props":1153,"children":1154},{"class":220,"line":320},[1155,1160,1164],{"type":34,"tag":218,"props":1156,"children":1157},{"style":1138},[1158],{"type":39,"value":1159},"title",{"type":34,"tag":218,"props":1161,"children":1162},{"style":225},[1163],{"type":39,"value":244},{"type":34,"tag":218,"props":1165,"children":1166},{"style":1148},[1167],{"type":39,"value":1168}," Opening keynote\n",{"type":34,"tag":218,"props":1170,"children":1171},{"class":220,"line":351},[1172,1177,1181],{"type":34,"tag":218,"props":1173,"children":1174},{"style":1138},[1175],{"type":39,"value":1176},"published",{"type":34,"tag":218,"props":1178,"children":1179},{"style":225},[1180],{"type":39,"value":244},{"type":34,"tag":218,"props":1182,"children":1183},{"style":314},[1184],{"type":39,"value":348},{"type":34,"tag":218,"props":1186,"children":1187},{"class":220,"line":361},[1188,1193,1197,1203,1208],{"type":34,"tag":218,"props":1189,"children":1190},{"style":1138},[1191],{"type":39,"value":1192},"start",{"type":34,"tag":218,"props":1194,"children":1195},{"style":225},[1196],{"type":39,"value":244},{"type":34,"tag":218,"props":1198,"children":1200},{"style":1199},"--shiki-default:#E9F284",[1201],{"type":39,"value":1202}," '",{"type":34,"tag":218,"props":1204,"children":1205},{"style":1148},[1206],{"type":39,"value":1207},"2026-10-09 10:00",{"type":34,"tag":218,"props":1209,"children":1210},{"style":1199},[1211],{"type":39,"value":1212},"'\n",{"type":34,"tag":218,"props":1214,"children":1215},{"class":220,"line":390},[1216],{"type":34,"tag":218,"props":1217,"children":1218},{"style":258},[1219],{"type":39,"value":1132},{"type":34,"tag":218,"props":1221,"children":1222},{"class":220,"line":419},[1223],{"type":34,"tag":218,"props":1224,"children":1225},{"style":1148},[1226],{"type":39,"value":1227},"The content goes here as plain **Markdown**.\n",{"type":34,"tag":35,"props":1229,"children":1230},{},[1231,1233,1239,1240,1246],{"type":39,"value":1232},"It's easy to read, easy to back up and easy to move. Cloning a project means ",{"type":34,"tag":115,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":39,"value":1238},"git clone",{"type":39,"value":845},{"type":34,"tag":115,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":39,"value":1245},"composer install",{"type":39,"value":1247}," – done. Users and roles are files as well. A database is only needed for Laravel internals, if at all – in our case a small SQLite file does the job.",{"type":34,"tag":103,"props":1249,"children":1250},{"id":504},[1251],{"type":39,"value":507},{"type":34,"tag":35,"props":1253,"children":1254},{},[1255,1257,1262],{"type":39,"value":1256},"Because ",{"type":34,"tag":999,"props":1258,"children":1259},{},[1260],{"type":39,"value":1261},"everything",{"type":39,"value":1263}," in Statamic is stored in files, an AI assistant in your editor can read and understand the whole project: templates, blueprints, content, configuration. It can create new collections, add fields, adjust entries or refactor templates without needing access to a database or an API. Everything also shows up in the Git diff, which makes it easy to review.",{"type":34,"tag":71,"props":1265,"children":1266},{"id":561},[1267],{"type":39,"value":564},{"type":34,"tag":103,"props":1269,"children":1271},{"id":1270},"price",[1272],{"type":39,"value":1273},"Price",{"type":34,"tag":35,"props":1275,"children":1276},{},[1277,1279,1284,1286,1291],{"type":39,"value":1278},"Statamic Core is free, but comes with limitations, most notably a single user account. As soon as you need several editors, roles, revisions, multiple languages/sites or the Git integration, you need Pro. Since May 2026 that costs ",{"type":34,"tag":148,"props":1280,"children":1281},{},[1282],{"type":39,"value":1283},"$349 per site",{"type":39,"value":1285}," (one-time, includes one year of updates), then ",{"type":34,"tag":148,"props":1287,"children":1288},{},[1289],{"type":39,"value":1290},"$99 per year",{"type":39,"value":1292}," for updates and support. Before it was $275 and $65.",{"type":34,"tag":35,"props":1294,"children":1295},{},[1296],{"type":39,"value":1297},"For a client project that's manageable. For hobby projects, small club websites or when you run lots of small sites, it's a noticeable expense compared to WordPress. So include the price in your quote from the start. On the plus side, forms, static caching and a navigation builder are already included, for which other systems often require paid plugins.",{"type":34,"tag":103,"props":1299,"children":1301},{"id":1300},"caching",[1302],{"type":39,"value":1303},"Caching",{"type":34,"tag":35,"props":1305,"children":1306},{},[1307,1309,1314],{"type":39,"value":1308},"To keep a file-based system fast, Statamic uses the ",{"type":34,"tag":148,"props":1310,"children":1311},{},[1312],{"type":39,"value":1313},"Stache",{"type":39,"value":1315},", a cache index over all content. On top of that come the regular Laravel caches (config, routes, views) and optionally static caching.",{"type":34,"tag":35,"props":1317,"children":1318},{},[1319,1321,1327,1328,1334,1335,1341],{"type":39,"value":1320},"In practice this means: if something looks \"odd\" after a deployment, it's almost always the cache. In our case, for example, a config cache with wrong absolute paths caused a 500 error. After every deploy, ",{"type":34,"tag":115,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":39,"value":1326},"cache:clear",{"type":39,"value":845},{"type":34,"tag":115,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":39,"value":1333},"config:clear",{"type":39,"value":154},{"type":34,"tag":115,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":39,"value":1340},"statamic:stache:clear",{"type":39,"value":1342}," are a must. If you use static caching, you also need to think about invalidation.",{"type":34,"tag":103,"props":1344,"children":1345},{"id":567},[1346],{"type":39,"value":570},{"type":34,"tag":35,"props":1348,"children":1349},{},[1350],{"type":39,"value":1351},"Statamic is a Laravel application and needs a matching environment:",{"type":34,"tag":140,"props":1353,"children":1354},{},[1355,1365,1370,1388,1393],{"type":34,"tag":144,"props":1356,"children":1357},{},[1358,1363],{"type":34,"tag":148,"props":1359,"children":1360},{},[1361],{"type":39,"value":1362},"PHP 8.3+",{"type":39,"value":1364}," (8.4 in some of our setups)",{"type":34,"tag":144,"props":1366,"children":1367},{},[1368],{"type":39,"value":1369},"Composer and ideally SSH access",{"type":34,"tag":144,"props":1371,"children":1372},{},[1373,1375,1381,1382],{"type":39,"value":1374},"Write permissions for ",{"type":34,"tag":115,"props":1376,"children":1378},{"className":1377},[],[1379],{"type":39,"value":1380},"storage/",{"type":39,"value":154},{"type":34,"tag":115,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":39,"value":1387},"bootstrap/cache",{"type":34,"tag":144,"props":1389,"children":1390},{},[1391],{"type":39,"value":1392},"GD or Imagick for image processing (Glide)",{"type":34,"tag":144,"props":1394,"children":1395},{},[1396],{"type":39,"value":1397},"Cron for the Laravel scheduler",{"type":34,"tag":35,"props":1399,"children":1400},{},[1401,1403,1409,1410,1416,1418,1424],{"type":39,"value":1402},"Cheap shared hosting with an old PHP version is out. At one host the account's default PHP version was still 7.4, so PHP had to be switched explicitly via ",{"type":34,"tag":115,"props":1404,"children":1406},{"className":1405},[],[1407],{"type":39,"value":1408},".htaccess",{"type":39,"value":154},{"type":34,"tag":115,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":39,"value":1415},"php84",{"type":39,"value":1417}," had to be used instead of ",{"type":34,"tag":115,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":39,"value":1423},"php",{"type":39,"value":1425}," on the CLI. Compared to a static Nuxt site on Netlify or simple WordPress hosting, that's considerably more effort.",{"type":34,"tag":103,"props":1427,"children":1428},{"id":635},[1429],{"type":39,"value":638},{"type":34,"tag":35,"props":1431,"children":1432},{},[1433,1435,1441],{"type":39,"value":1434},"Deployment itself is actually unproblematic: GitHub Actions builds ",{"type":34,"tag":115,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":39,"value":1440},"vendor/",{"type":39,"value":1442}," and the assets, transfers them to the server, and a few Artisan commands run afterwards. That's not specific to Statamic, it's everyday Laravel. Still, there were a few stumbling blocks:",{"type":34,"tag":140,"props":1444,"children":1445},{},[1446,1480,1494,1512],{"type":34,"tag":144,"props":1447,"children":1448},{},[1449,1454,1456,1462,1464,1470,1472,1478],{"type":34,"tag":148,"props":1450,"children":1451},{},[1452],{"type":39,"value":1453},"nginx and Glide:",{"type":39,"value":1455}," Image variants (",{"type":34,"tag":115,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":39,"value":1461},"/img/...",{"type":39,"value":1463},") returned 404 because the default configuration intercepts static file extensions like ",{"type":34,"tag":115,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":39,"value":1469},".webp",{"type":39,"value":1471}," before PHP gets a chance. You need a dedicated ",{"type":34,"tag":115,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":39,"value":1477},"location",{"type":39,"value":1479}," rule.",{"type":34,"tag":144,"props":1481,"children":1482},{},[1483,1492],{"type":34,"tag":148,"props":1484,"children":1485},{},[1486],{"type":34,"tag":115,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":39,"value":1491},"open_basedir",{"type":39,"value":1493}," was set too restrictively on Plesk.",{"type":34,"tag":144,"props":1495,"children":1496},{},[1497,1502,1504,1510],{"type":34,"tag":148,"props":1498,"children":1499},{},[1500],{"type":39,"value":1501},"Permissions and directories:",{"type":39,"value":1503}," ",{"type":34,"tag":115,"props":1505,"children":1507},{"className":1506},[],[1508],{"type":39,"value":1509},"storage/logs",{"type":39,"value":1511}," was missing after the deploy because the directory wasn't in the repository.",{"type":34,"tag":144,"props":1513,"children":1514},{},[1515,1520,1522,1528],{"type":34,"tag":148,"props":1516,"children":1517},{},[1518],{"type":39,"value":1519},"Content vs. code:",{"type":39,"value":1521}," This is the real catch. If editors change content on the server and a code deploy later overwrites those files from the repository, the changes are gone. You either exclude ",{"type":34,"tag":115,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":39,"value":1527},"content/",{"type":39,"value":1529}," from the deploy or rely on the Git integration – which then has to play nicely with the deploy so pushes don't fail with \"non-fast-forward\".",{"type":34,"tag":35,"props":1531,"children":1532},{},[1533],{"type":39,"value":1534},"Once it's set up properly, it runs reliably. But if you're starting out, plan for these points from day one.",{"type":34,"tag":71,"props":1536,"children":1537},{"id":885},[1538],{"type":39,"value":888},{"type":34,"tag":35,"props":1540,"children":1541},{},[1542],{"type":39,"value":1543},"Statamic is one of the most pleasant CMSs I've worked with so far. The combination of Git workflow, modern backend and full customisability is a great fit for projects where editors need a comfortable interface while developers still want full control over code and structure. The fact that everything lives in files also makes working with AI assistants much easier.",{"type":34,"tag":35,"props":1545,"children":1546},{},[1547],{"type":39,"value":1548},"The downsides are manageable, but real: the price of Pro, a server with a current PHP version, and a bit of discipline around caching and deployment. For simple, small sites without editors or with a tight budget, there are other options that may fit better. For client projects with real requirements, I'd use Statamic again any time.",{"type":34,"tag":900,"props":1550,"children":1551},{},[1552],{"type":39,"value":904},{"title":8,"searchDepth":285,"depth":285,"links":1554},[1555,1556,1563,1569],{"id":962,"depth":285,"text":965},{"id":98,"depth":285,"text":101,"children":1557},[1558,1559,1560,1561,1562],{"id":989,"depth":320,"text":992},{"id":105,"depth":320,"text":108},{"id":130,"depth":320,"text":133},{"id":1107,"depth":320,"text":1110},{"id":504,"depth":320,"text":507},{"id":561,"depth":285,"text":564,"children":1564},[1565,1566,1567,1568],{"id":1270,"depth":320,"text":1273},{"id":1300,"depth":320,"text":1303},{"id":567,"depth":320,"text":570},{"id":635,"depth":320,"text":638},{"id":885,"depth":285,"text":888},"content:en:blog:statamic.md","en/blog/statamic.md",1791545016275]