Companies can have social profiles #906

Closed
opened 2026-10-13 07:38:51 +00:00 by tiagoagueda · 1 comment
Owner

A company should hold social profiles (LinkedIn page, Mastodon, Bluesky, YouTube, …) the way a contact and the person's own profile already do.

What exists today

  • Company (src/postulo/jobs/models.py:314) has one website and one careers_url column and no web links.
  • core.WebLink (src/postulo/core/models.py, kinds social / repository / website) is held by Profile (accounts/models.py:352) and Contact (jobs/models.py:895) through a GenericRelation, edited with the formsets in core/web_links.py and WebLinksMixin.
  • Services and brand marks come from plugins/link_services (#867, #905).

What would change

  • Company gains web_links = GenericRelation("core.WebLink"); the company form shows the social-profile block with the same rows, primary star and service select as a contact.
  • The company page lists them under the website and careers links, with the service's brand mark.
  • The API's company read/write carries them like a contact's links; the archive export/import and the erasure cascade include them.

Open question

  • Whether website moves into a website-kind row too (one primary, so a CV/letter still prints one), or stays a column. Suggest: social only here; the website move as a follow-up.

Checked against main at 3119770ca.

A company should hold social profiles (LinkedIn page, Mastodon, Bluesky, YouTube, …) the way a contact and the person's own profile already do. ## What exists today - `Company` (`src/postulo/jobs/models.py:314`) has one `website` and one `careers_url` column and no web links. - `core.WebLink` (`src/postulo/core/models.py`, kinds social / repository / website) is held by `Profile` (`accounts/models.py:352`) and `Contact` (`jobs/models.py:895`) through a `GenericRelation`, edited with the formsets in `core/web_links.py` and `WebLinksMixin`. - Services and brand marks come from `plugins/link_services` (#867, #905). ## What would change - `Company` gains `web_links = GenericRelation("core.WebLink")`; the company form shows the social-profile block with the same rows, primary star and service select as a contact. - The company page lists them under the website and careers links, with the service's brand mark. - The API's company read/write carries them like a contact's links; the archive export/import and the erasure cascade include them. ## Open question - Whether `website` moves into a website-kind row too (one primary, so a CV/letter still prints one), or stays a column. Suggest: social only here; the website move as a follow-up. Checked against `main` at `3119770ca`.
Author
Owner

Fixed in 996c21336. Social profiles only, as the issue suggested; the website stays a column.

Fixed in 996c21336. Social profiles only, as the issue suggested; the website stays a column.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo#906
No description provided.