Calendar and publishing
Writing a post
The composer is one screen: what goes out, where it goes, and when.
Not captured yet
This picture is taken from the running app, not drawn by hand. Run npm run docs:shots to take it.
composer.png
Media
Drop files straight onto the media well. Several at once becomes a carousel. Or pick from your library, or open Upload → From Canva or Upload → From Google Drive to bring a design or a file in without downloading it first. There is no step where you have to go somewhere else first.
On the phone, three tiles sit where the media will go: Photos for the camera roll, MORR Library, and Camera, which opens your iPhone's own camera and puts the shot on the post. Media is optional; on X, Threads, Facebook and LinkedIn a post can be words alone.
Large videos are made to fit
The service that publishes for MORR takes a video up to 300 MB, and Bluesky up to 100 MB. A bigger one is not refused: when you press Schedule or Post now, MORR makes a smaller copy that fits the tightest channel you picked, uploads it, and schedules that. A 4K clip stays 4K when the size allows; otherwise it steps down to 1080p, then smaller only as a long video needs. The original in your library is never changed.
| While it works | What it is for |
|---|---|
| Making this video fit Instagram's 300 MB… 42% | Which channel set the size, and how far along it is. A story says which frame. The bar runs on through Uploading the smaller copy…, which counts the upload on its own. |
| Stop | Stops at once. Nothing is scheduled and the post keeps its video; press the same button again whenever you like. Closing the composer mid-way asks first, because the work so far would be lost. |
| Try again | After a shrink that failed, runs the button you pressed again: Schedule or Post now. |
| Save draft, finish on your phone | Shown only in a browser that can't encode video. MORR makes it fit in Chrome or Edge on a computer, and the phone makes it fit when you schedule it there. |
Types
Type is where the post lands on the platform. The picker offers what every channel you chose can take, and a type one of them cannot take says so under the picker and holds the post until you change one or the other. On the phone the same table applies, without carousels.
| Type | Where it goes | What it is |
|---|---|---|
| Post | Every channel | The feed. One picture or one video, with the caption. |
| Story | Instagram, Facebook | Full-screen, gone in a day, no caption on the platform. Drop one frame or several: each goes out as its own story, in the order you set. |
| Reel | Instagram, Facebook, YouTube | A vertical video. On YouTube it goes out as a Short. Instagram reels are shared to the feed as well. |
| Carousel | Everywhere but YouTube and Pinterest | Up to ten images that swipe; four on X, Threads and Bluesky. Slides past a channel's count are outlined in red, and Split into two posts moves them to their own draft a day later, so every slide still goes out. |
Options
Under the type is Options for the channel the post goes to: everything that platform lets a post carry beyond the caption and the media. Only what applies is shown, so a story has no collaborators and a photo has no cover frame, and a channel with nothing to ask (Threads, Bluesky) has no section. The rarely needed ones sit under More. A choice you leave at the platform's default is not written down, so the post behaves the way the platform does on its own. The phone asks the same questions in the same words.
| Channel | What you can set |
|---|---|
| Collaborators (up to three; the post is on their profile once they accept), tag people, show a reel on the feed grid too. More: name the reel's audio, make it a trial reel. Collaborators and tag people search as you type, among everyone MORR knows and live on Instagram, with each account's picture; a handle typed in full and never picked is sent as written. | |
| Caption on every carousel image. | |
| TikTok | Who can see it, paid partnership, promotes my own business, made with AI, comments, duets, stitches, let TikTok add music to a photo post, a title. More: send to my TikTok drafts. |
| YouTube | Title, description, visibility, category, tags, made for kids, made with AI. More: license, embedding, public view count. |
| X | Who can reply, a poll with two to four choices and how long it runs. More: quote a post, post into a community. |
| More: reshare a post with the caption as your commentary. | |
| The board, a title, and where the pin links. | |
| Any video | More: the cover frame, as a moment in the clip, when you have not set a cover image. Send the file as it is, with no re-encode. |
Caption
Write it, or ask for a draft. The caption assistant looks at the actual photograph or the video's frames before it writes, so what it suggests is about the thing you are posting. It also reads how you write and what has worked for you, so each of the three options carries one line on why this works for you. Pick one and it goes in the box.
| With a caption in the box | What it does |
|---|---|
| Shorter | Cuts it to about sixty percent. Keeps the hook and the payoff. |
| Punchier | A harder first line, then every sentence after it tightened. Same facts. |
| More me | Rewritten toward how you actually write: your sentence length, your words, your openers. |
| Different hook | Keeps the body and gives it a new first line from a different kind of opening. |
| Rewrite as … | The tone picked above, inside your own voice. |
A tweak replaces the caption and offers a second take under it. Use this take instead swaps it in. How it writes, and what it reads first, is on How MORR writes for you.
On the phone, the caption screen opens on a post with media, looks at it, and writes the first caption on its own. The five tones are chips: Casual, Professional, Playful, Bold and Minimal. Tap one before the caption lands to write in it, or after, to rewrite what is there. The box under them is for anything to add, and Hashtags instead turns the screen to suggesting hashtags.
Emoji by name, without leaving the keyboard: type a colon and two letters, :fi, and a short list opens under the box. The names are the ones Slack and GitHub use. A whole name with its closing colon, :fire:, swaps itself in. Web only; the phone has its own emoji keyboard.
Suggested hashtags
Hashtags over the caption opens one panel with two halves behind a switch: Suggested and Saved groups. On the phone the same switch sits under the caption. It opens on Suggested once there is a caption to match, and on your groups before that. Suggested offers tags that already worked, each with the reason under it. First the tags on your own best posts, measured against your usual on that channel: on 3 of your best posts, up to 2.4x your usual. Then tags on top posts from the creator directory about what this caption is about: used by 4 top posts about skincare. Click or tap one and it goes in. No AI is involved, so it works the same when the AI tools are resting.
| It never | Why |
|---|---|
| Offers a tag already on the post | In the caption or the first comment, in any capitalization |
| Goes past what the platform takes | 30 on Instagram, 15 on YouTube (past that YouTube ignores them all), one on Threads, 20 on Pinterest, counting the tags already there. Posting to several, the tightest one binds |
| Reshuffles while you click | The list is asked for once. The refresh button reads the words as they are now |
With nothing to offer it says why and what to try: your channels have no posts with views yet, or no top post on that topic has been read, so name the topic another way or use a saved group. With the first comment open, Add to chooses whether a tag goes in the caption or the comment.
First comment
Add a first comment under the caption opens a second box: words that go up under the post the moment it is live, which is where most people keep their hashtags so the caption reads clean. It counts against the platform's own limit on a comment, and a comment over it holds the post until it fits. Posting to several channels, one comment goes to each that takes one, held to the tightest limit among them.
| Channel | First comment | Why |
|---|---|---|
| YouTube, Bluesky | Yes | Posted with the permission the connection already has |
| Instagram, Facebook, Threads | Yes, once the connection has comment access | The platform only lets approved apps comment. If it says no, the post still goes out, and the post says why |
| TikTok, X, LinkedIn, Pinterest | Not offered | No way for MORR to post a comment there (TikTok and Pinterest have none; X charges for it; LinkedIn is not built yet) |
It is not offered on a post you put up yourself: there is no post for MORR to find, so paste it after you post. Once the post is out, opening it shows the comment and whether it went up.
| On the post | Means |
|---|---|
| Goes up right after the post is live | Waiting for the platform to finish posting. Usually under a minute |
| Posted under the post | It is there |
| Not posted, with why | The post is out; only the comment is not. Retry tries again within a minute; Copy comment is there to paste it in the app yourself |
The preview
Beside the editor is the post inside a real phone, drawn as the destination will actually show it, live as you type. It follows the channel you have chosen: Instagram's feed, Reel and Story each have their own shape; TikTok and a YouTube Short are full-screen video with their own strip of icons down the side; X, Threads, LinkedIn and Facebook draw their own header and action row (LinkedIn and Facebook label theirs, the others don't, and neither does MORR, since that is the actual difference); Pinterest is a Pin with a Save button and nothing else, because that is what a Pin looks like. A caption that reads fine in a box is a wall of words over a Reel or a Short, and this is where you find that out before it posts.
On the phone it is Post preview, the row right under the caption, and it opens as a sheet.
Feedback
The second tab of that pane is the thread on the post. Anyone in the workspace can read it and add to it, @ tags someone from the roster, Enter sends, and a comment lands live on every open screen. On the calendar a post with feedback wears a small count on its card. A post has to be saved once (a draft is enough) before the thread opens, because feedback lives on the post.
Action required
Above the buttons, when something is missing, is one line per channel per problem, with the channel's own mark: this one needs a photo, that one only takes video, this caption is over the limit there, that channel needs reconnecting. Same rules the Schedule button enforces, said by name instead of a gray button.
One post, several channels
Tick more than one channel and the same media goes to each of them as its own post. The caption goes with it as written, unless you turn on Different words on each channel under the list: then every channel gets its own box, blank ones fall back to the main caption, and Write each with AI rewrites the main caption for each platform (short for X, a line break and a question for LinkedIn, hashtags where they still work). Each box counts against that platform's own limit, and a post over any of them will not schedule until it fits.
When
| Choice | What happens |
|---|---|
| Save as draft | Kept, not queued. It shows in the calendar and nowhere public. |
| Schedule | Queued for the time you set. |
| Post now | Queued about a minute out, which is the next time the publisher looks. |
| Post it myself | Nothing sends it. At its time MORR hands it to you. See Posting it yourself. |
On the phone, Post for me or Remind me under the post decides who sends it. Post for me is MORR, through the channel you ticked, and it is where a new post with a channel starts. Remind me buzzes your phone five minutes before; with a channel ticked MORR still posts it, and with none it is the only thing that can happen. The button that sets the time reads what it will do: Schedule for Thu 6:30 PM.
Link or products on your bio page, under Post it myself, is what this post's tile opens on your bio page: products you paste or pick, or a link. Attach them before the post goes out and the tile opens them the moment it publishes. The row appears once you have a published Grid bio page. See Your posts as the page.
Once it is scheduled or out, Repurpose in the footer makes the same post for your other platforms, each fitted. See One post, every platform.
The day and the time are two controls. The day opens a month you can click; the time offers every quarter hour, and you can type instead. 9, 930, 9:05pm and 21:05 all read as what you meant, so a time the menu does not offer is still one keystroke away.
Both are in the time zone named beside them, not this computer's. When the two differ, the line under the field says the local time as well, because "9:00 AM" on its own is the number that gets a post out at one in the morning.
The phone shows a Time zone row only once the zone is not the phone's own. To pick another, tap Posting from another time zone? under the line that says when it sends.
Blitz, from the phone
On the phone, Blitz in MORR Cam films a take and posts it with no further touch: cut, captioned, in your look, one post per channel at each channel’s next open best time. Those posts are ordinary posts and land on this calendar like any other. See Blitz for what it does to a take.
When someone in the workspace has Blitz set up, a card above the calendar shows which channels it posts to, how it cuts, and what it did with today’s takes. Pause stops the phone from starting a new Blitz take; Resume turns it back on. A held or failed take is finished from the phone.
| A take is | Which means |
|---|---|
| Working | The phone is on it: saving, cutting, adding captions, cleaning the voice, placing the title, exporting, writing the caption, uploading or scheduling. |
| Queued | Its posts exist, with the time each goes. “Queued to 2 of 3” means one channel refused it, and the line under it says which and why. |
| Held | It missed the quality bar. The reason is shown; the phone offers Post it anyway or Open in the editor. |
| Failed | A step broke. The reason is shown; the phone offers Try again. |