Portfolio

Manage the projects portfolio on your blog from the terminal: list, create, edit, delete, reorder, and set the projects page title and description.

Not to be confused with floggy projects, which manages task projects. The blog portfolio is floggy portfolio.

Projects

list

floggy portfolio list
floggy portfolio list --json
ID            VIS   ORDER  LINKS         NAME
9kQ2mNp7…     yes   0      blog,project  Acme Redesign
b3Rf8Lt1…     yes   1      project       Side CLI

The LINKS column shows which of the two optional links a project has: blog, project, both, or empty.

create

floggy portfolio create --name "Acme Redesign"
floggy portfolio create --name "Side CLI" --project-url example.com --tags "rust,cli"
floggy portfolio create --name "Case study" \
  --description "A full rebuild" \
  --logo https://cdn.example.com/logo.png \
  --blog-url acme-case-study \
  --project-url https://acme.com \
  --tags "design,web" \
  --visible true \
  --order 0

Prints the new project id.

Flags: --name (required), --description, --logo <url>, --blog-url <url>, --project-url <url>, --tags a,b,c, --visible true|false, --order <n>, --json.

edit

floggy portfolio edit <id> --name "New name"
floggy portfolio edit <id> --tags "rust,systems"
floggy portfolio edit <id> --description ""   # clear the field

Same flags as create, all optional. Pass an empty string to clear a field: --description "", --blog-url "", --project-url "", --tags "".

delete

floggy portfolio delete <id>

reorder

floggy portfolio reorder <id1> <id2> <id3> ...

Pass the FULL ordered id list. A subset reindexes only the ids you pass and can collide with the ones you left out. List first, then reorder the complete set.

page

Read or write the projects page title and description.

floggy portfolio page                                  # show current title/description
floggy portfolio page --title "Selected work"
floggy portfolio page --title "Work" --description "Things I have shipped."
floggy portfolio page --json

With no write flags it reads. With --title or --description it writes.

A project has two optional links, and they are normalized differently:

  • --blog-url points at your own writing. A bare post slug (my-post) becomes the root-relative /my-post. A /-prefixed path (/my-post) is kept as-is. A full URL (https://elsewhere.com/post) is treated as external.
  • --project-url points at the project itself. A bare domain (example.com) gets https:// auto-added. A full URL is kept as-is.

Click behavior on the blog

How a project card behaves depends on how many links it has:

  • Both links set - clicking the project opens a modal with "Read blog" and "View project".
  • Exactly one link - the card navigates straight to it, no modal.
  • No links - the card is not clickable.

Scopes

Command Scope
portfolio list, portfolio page (read) profile:read
portfolio create/edit/delete/reorder, portfolio page (write) profile:write