Build a portfolio site
Build a portfolio website with AI. The agent builds the shell around your work.
A portfolio is a content model wearing a nice layout. The agent builds the project post type with fields for client, year, sector, credits and rights, a filterable archive, a single-project template, and galleries where the photography credit is a field rather than an afterthought.
Free: Elementor and blocks; Pro: advanced and additional modules, Draft content; review shared changes separately, All build briefs
PROJECT TYPE: PORTFOLIO SITE
BUILDER: [BRICKS / DIVI 5 / OXYGEN 6 / BREAKDANCE / ETCH / MOSAIC]
FIELDS PLUGIN: [ACF / ACPT / META BOX / PODS / JETENGINE]
DISCIPLINE: [ARCHITECTURE / PHOTOGRAPHY / DESIGN / DEVELOPMENT / FILM].
STUDIO: [NAME], working in [SECTORS] across [REGIONS].
MODEL: Project post type with fields for client, year, status, sector, location, services, collaborators, photography credit, usage rights, summary, challenge, response, outcome and gallery.
TAXONOMY: [SECTOR / SERVICE / LOCATION] as filters on the archive.
ARCHIVE: Filterable grid, [N] per page, ordered by [YEAR / FEATURED]. Show client, year and sector on the card.
SINGLE TEMPLATE: One continuous editorial scroll: identity strip, hero image with credit, brief, constraints, response, image sequence, credits, related projects, enquiry CTA.
ART DIRECTION: [PALETTE], [TYPE], crop discipline. Every image crop is intentional; no masonry chaos.
RIGHTS: Never publish an image without a credit field value. Missing rights are [CONFIRM] and the project stays a draft.
ENQUIRY: [FORM PLUGIN] with project type, stage, timeline and budget range. Routing is [CONFIRM].The credit and rights fields matter more than they look. Photography permissions are the thing portfolios get sued over, so they belong in the model from day one.
What happens next
One brief, many typed calls
Nothing here is a black box. Each step is a separate ability call, checked against the connected user's WordPress capabilities, the safety profile and the confirmation rules before it runs.
Start on staging. A draft page does not isolate shared menus, templates, styles, taxonomy, access or delivery settings: inspect affected routes and approve those changes separately. These briefs describe planned calls, not completed runtime tests; verify saved data, the native editor and rendered output before launch.
Abilities this run calls
acf-create-post-typeacf-create-taxonomyacf-create-fieldgroupacpt-create-post-typepods-create-cptbricks-create-templatebricks-set-template-conditionsdivi-create-theme-builder-templatemosaic-create-templateimport-media-urlattach-mediaset-featured-imagecreate-termassign-termscf7-create-form
Registered names from the shipped plugins. Schemas and descriptions are in the ability reference.
Models the project properly
Client, year, status, sector, collaborators, credit, rights. Plain posts can be tagged by sector, but they have nowhere structured to keep the client, year or photo credit; a project type keeps those fields and the filters together.
Creates the taxonomy that drives filtering
Sector, service and location as real taxonomies with their terms, so the archive filters are query-driven rather than hand-maintained lists.
Builds the archive template
A loop bound to the project fields, with the card showing what a visitor actually scans for, client, year, sector, instead of a truncated paragraph.
Builds the single-project template
One template that every project uses. Written once against the builder's element schemas, bound to fields, so adding project forty needs no design work.
Imports and credits the media
Images imported, attached, alt text written, credits mapped into the credit field. The brief tells the agent to leave a project without rights information as a draft; that is a prompt rule, not a server check, so review credits before you publish.
Adds the enquiry path
Propose enquiry fields from the installed schema. Inspect notification and routing defaults and verify a supported disabled state before saving or embedding; if that cannot be established, leave delivery configuration for the owner's native-editor review.
Scope
What it drives, and where it stops
GoBuildWP Pro ships 89 integrations. Pro modules require an active GoBuildWP Pro licence and the supported plugins installed on your site. Check feature-specific version and edition gates in the linked references; Free Elementor and block-editor basics have separate coverage.
Plugins this brief can drive
- Builders for layouts; template contracts differ
- Bricks, Divi 5, Oxygen 6, Breakdance, Etch, Mosaic, Beaver Builder, WPBakery
- Content modelling
- ACF, ACPT, Meta Box, Pods, JetEngine, Etch
- Enquiry forms
- WPForms, Gravity Forms, Fluent Forms, Formidable, Contact Form 7, Ninja Forms
- Themes
- Astra, GeneratePress, OceanWP, Blocksy, Neve, Kadence
Where it stops and asks you
- Image rights are not something an agent can verify. The brief keeps a project with missing credit or licence information as a draft, but nothing on the server enforces that; a person checks rights before publishing.
- Archive and single templates apply to every project. Ask for their conditions to be read before the write and reported after it. A Bricks template the run creates can be rolled back from the ledger; a Divi Theme Builder template is recorded as irreversible.
- Deleting a post type or taxonomy is destructive and requires explicit confirmation. Storage retention and recovery depend on the owning plugin and operation; removing registration does not establish deletion of every stored post/value. Inspect the exact contract, export data and plan recovery before approving deletion.
- Awards, client names, project values and completion dates come back marked [CONFIRM] unless you supplied them.
Before, during and after the run
What you need before you build a portfolio website with AI
A portfolio run is only as good as the project material behind it, and that material lives with you. Before the brief goes in, gather a short folder per project: the final images at full resolution, who took each one and on what terms, the client's name and whether you may print it, the year, and a few honest sentences about the brief and what you did. Projects you cannot document yet can still be modelled; they simply stay drafts.
On the site itself you need WordPress, a builder with a template system, and a fields plugin. The content model is where the edition line falls. Creating the project post type, its taxonomies and the field group (acf-create-post-type, acf-create-taxonomy, acf-create-fieldgroup and their ACPT, Meta Box and Pods equivalents) is Pro. With Free alone you can still lay out pages in Elementor or blocks and tag ordinary posts with create-term and assign-terms, but the filterable, field-driven archive the brief describes needs the Pro fields modules.
A walkthrough: ACF and Bricks, one project at a time
Here is how the run usually unfolds on a studio site using ACF and Bricks. The model and templates are built once; after that, each project is a repeatable loop you can pause between entries.
- acf-check-setup confirms the ACF edition and version, because post types and taxonomies are only manageable through abilities on ACF 6.5 or newer; on older ACF it reports that rather than failing halfway.
- acf-create-post-type and acf-create-taxonomy register the project type and the sector, service and location filters; acf-create-fieldgroup adds client, year, credit, rights and the gallery in ACF's own export format, so the result is editable in ACF afterwards.
- bricks-create-template builds the archive and single-project templates; their conditions are a separate decision, made with bricks-set-template-conditions after you have looked at them.
- For each project: create-post as a draft, import-media-url for its images, edit-image to crop a copy for the card (the original stays untouched), set-featured-image, then acf-write-values for the fields. A gallery value replaces the whole field and needs an explicit replace wrapper, so it cannot be wiped by accident.
- Finally create-term and assign-terms tag the project so it appears under the right filters, and verify-rendered-page checks the served archive for images with no alt text.
Credits, rights and alt text are three different checks
They get muddled, so separate them. A credit says who made an image. Rights say whether you may show it here, for how long and in which markets. Alt text says what the image shows for someone who cannot see it. The agent can store all three, but only the last one is something it can produce itself, and even then only after it has looked at the picture with get-media-image.
If you need placeholder imagery while waiting on a photographer, search-images queries Openverse for openly licensed images and returns the licence, creator and a ready attribution string. That is fine for a mood board or a staging draft; it is not your work, so swap it out before the project is published. update-image-alt can then set alt text across a whole gallery in one call, with each image undoable on its own.
Timeline: why the twentieth project is faster than the first
The first sitting is the slow one: modelling, two templates and a single test project you review closely in Bricks and a browser at phone width. That review usually sends changes back to the template rather than the project, which is the point of doing one first. Once the shell is right, each further project is mostly reading your notes and writing fields, so batches go quicker and review shifts to the words and the image order.
Writing project copy is where time really goes, and an agent does not shorten the part that needs your memory of the job. Let it draft summaries from your notes, mark anything it inferred with [CONFIRM], and edit those yourself. A portfolio that reads as written by the studio is worth more than one that went live a week earlier.
Undoing a template or a batch of projects
Template writes and field writes are recorded in the ledger, but whether one comes back depends on the module. A Bricks template the run created, or its conditions, has a before-image, and so do ACF values written to a post, so rollback-change can usually reverse one bad project or archive card. Some writes are recorded as irreversible instead: editing an ACF field group, ACF values on terms, users or options pages, and a Divi Theme Builder template. Check each entry's rollback state in list-changes before relying on it.
If a whole evening's batch was built on the wrong field names, list-sessions shows that session's writes. Before undo-session, read its plan: it reverses supported changes newest first, refuses the run if you have hand-edited any of those projects since, stops at the first change that fails verification, and lists irreversible changes, which block the run unless you explicitly allow a partial undo.
Deleting the model is different. acf-delete-post-type refuses while projects exist unless forced, and even forced it leaves the project posts in the database under a type nothing registers any more. Export first and treat deletion as a decision you make in wp-admin, not one you hand to the agent.
Questions
Build a portfolio site: questions
Can it migrate my existing projects into the new model?
It can read existing posts and create new project entries from them, field by field. Treat it as a supervised migration on staging, with a diff at the end, rather than an unattended import.
What if I already have a portfolio post type?
The agent inspects registered post types and field groups first and works with what exists. Creating a second, competing project type is the kind of thing it reports back rather than doing quietly.
Does it handle galleries and image credits?
Images are imported, attached, given alt text and mapped to a credit field. That field is part of the model precisely so an uncredited image is visible as missing data rather than invisible risk.
Send the brief. Review the portfolio site.
Install GoBuildWP Free for the connection and supported Elementor/block basics. Add eligible Pro when the selected task needs advanced or additional builder, commerce or plugin operations; inspect each module's dependencies.