Americon Bid Portal
User manual
How the bid portal works, control by control. Every "?" on the site links into this page.
Download this manual One file. Works offline, prints, and can be emailed to somebody without an account.
New here? Start with these
Section 1
About the portal
What this site is for, who uses it, and how to get help without leaving the page you are on.
What the bid portal does
The portal publishes Americon bid opportunities and their deadlines, and hands out plan documents to the contractors invited to price them.
The Americon Bid Portal does three jobs, and everything on the site is in service of one of them.
- It publishes bid opportunities. Every project carries a bid due date, a location, the trades wanted, and the drawings. Public projects appear on the bid calendar for anyone to find. Private projects appear nowhere and are reached only through an invite link.
- It distributes plan documents. Drawings and bid documents are attached to the project and served through an access-checked endpoint, so a private project's plans cannot be downloaded by someone who was never sent the link.
- It keeps track of who is bidding. Contractors are asked to identify themselves when they take the plans. That list is what makes it possible to tell everyone when an addendum is issued or a bid date moves.
Two audiences use it, and they use it very differently. Americon staff sign in and manage projects. Contractors never sign in at all — they arrive from an email link, read the project, take the plans, and leave.
Roles and what each one can do
Project Managers and Project Coordinators hold identical permissions. Administrators hold those plus account management and the WordPress admin.
| Role | Signs in? | What they can do |
|---|---|---|
| Administrator | Yes | Everything below, plus creating and suspending accounts, and access to the WordPress admin and the Americon tools pages. |
| Project Manager | Yes | Create, edit and delete projects; see private projects; upload and remove plan files; send invites and plan-holder notifications; export project lists. |
| Project Coordinator | Yes | Exactly the same as Project Manager. |
| Contractor / bidder | No | Views public projects and the bid calendar. Views a private project only when holding its invite link. Downloads plan files. Subscribes to the calendar feed. |
Staff never need the WordPress admin screens. Anyone who is not an administrator is redirected out of /wp-admin and back to the calendar dashboard, and the admin bar is hidden for them.
The help buttons
Press any "?" on the site for a short explanation of the control beside it, with a link into the full manual.
Small "?" buttons sit beside the controls that are worth explaining. Press one — with the mouse, with a finger, or by tabbing to it and pressing Enter — and a short explanation appears. Press Escape, or click anywhere else, to dismiss it.
Each one carries a Read more link into the matching entry in this manual, so the popup can stay short.
Section 2
For project managers and coordinators
What the portal takes off your desk, what it can prove afterwards, and the short path through your first project. Everything here is covered in full further down — this is the map.
What the portal does for you
It publishes the job, sends the invitations, hands out the drawings, and keeps the record of who was asked and what they did about it.
Bidding used to live in an Outlook folder, a spreadsheet of addresses, and somebody's memory. The portal takes the four jobs that were spread across those and does them in one place, against one project.
| The job | What the portal does | Where |
|---|---|---|
| Publish the opportunity | A project carries its bid date, location, trades and drawings. Public ones appear on the bid calendar for any contractor to find; private ones appear nowhere and open only from an invite link. | Creating a project |
| Ask people to bid | Pick contacts and groups from the shared directory, see who is excluded and why before anything sends, then send. Each firm gets its own link. | Invitations |
| Hand out the drawings | Plan files are served through an access check, not from a public folder. Contractors identify themselves as they take them, which is what makes it possible to tell them about an addendum later. | Plan holders |
| Keep the record | Who was asked, when, whether it was delivered, whether it was opened, and whether they said they are bidding — exportable as a spreadsheet. | Who has been invited |
Manager and Coordinator hold identical permissions. The distinction is who is responsible for the job, not what the software will let you press.
Your first project, start to finish
Create a draft, fill in the editor, publish, invite, then watch the plan holders arrive. Nothing leaves the building until you publish.
The whole path, in the order you will actually walk it. Each step is a topic of its own further down.
- Create the draft. Name, city and state, bid due date, and the two people responsible. Everything else can wait. Choose Public or Private here — see Visibility, because publishing a job that should have been private cannot be undone once the calendar has served it.
- Fill in the editor. The rail down the left side is the whole project; each entry shows its own summary, so you can see what is still empty without opening it. Add the scope, the trades, the drawings.
- Upload the drawings, and give each one a revision label that matches its title block. This is the single most consequential field on the screen — see Revision labels.
- Publish. Until you do, the project is off the calendar, sends no reminders, and its plan files will not download — an invitation sent from a draft arrives with dead links.
- Invite. Open Contractor invite email, press Choose who to invite, pick contacts, groups or a whole trade, and read the review step before you send. Send a test to yourself first.
- Watch the plan holders. Contractors who take the drawings identify themselves, and appear in the project. That list is who you notify when a drawing is revised or the date moves.
What contractors do without calling you
Lost links, calendar subscriptions and "we are not bidding this one" are all self-service. None of them need anybody at Americon to be at their desk.
Every one of these used to be a phone call, and every one of them arrived at the worst possible moment — out of hours, or on the afternoon of the deadline.
- Get their invitation back. A contractor who lost the email asks for it again from the site, and it is sent to the address already on the invitation. Nothing is revealed to somebody typing in a stranger's address.
- Say they are not bidding this one — without unsubscribing from everything. That is the column a bid board needs and a blanket unsubscribe destroys.
- Subscribe to the bid calendar, so public deadlines appear in their own calendar automatically, with no account.
- Add one bid date to their calendar from the project page.
- Take the drawings, identifying themselves as they go.
What the portal can prove afterwards
Every invitation sent from the portal is recorded with its delivery outcome. That record is what answers a good-faith solicitation question months later.
On a public job, or a job with a participation goal, somebody may eventually ask who was invited to bid. That question arrives long after the memory of it has gone, and an Outlook sent-items folder is not an answer — it does not say whether the message was delivered, and it does not survive the person leaving.
The portal records, per firm: that they were invited, when, what the mail server said about delivery, whether the invitation was opened, whether they took the drawings, and whether they told us they are bidding.
Download the record saves all of it as a spreadsheet — the version to hand to an owner or an auditor.
The audit trail
An append-only record of who changed what and when — deadlines, visibility, plan files and access links. Months later, it is what settles the argument.
Bid deadlines, visibility, plan attachments and access codes are contractual facts, and WordPress keeps no history of them on its own. The audit trail does.
It answers "the due date was different when I looked" and "when did that invite link stop working", long after everybody has stopped remembering. Each entry records what was done, on which job, by whom, and when — with the person's name kept alongside their account, so an entry still names somebody after they have left.
Search by job or by person, narrow it to one kind of change, or set a date range. The newest entries are first.
The screen shows changes to jobs — deadlines, visibility, plan files, invitation links, bid correspondence. Account changes and sign-ins are recorded too, and an administrator can see those; they are site administration rather than anything about a bid, so they are not listed here.
What happens without anyone pressing anything
Deadline reminders, bid-closed notices and the nightly health check all run on their own. You are told when something needs you.
- Deadline reminders go to plan holders as a bid date approaches.
- Bidding closes on its own at the due date. Closing early, or reopening, is a deliberate act you can take in the editor.
- Addresses that stop working are set aside automatically when mail bounces, so the same dead address is not written to forever.
- The site checks itself every night and mails administrators when something breaks — rather than waiting for a contractor to ring up and report it.
Section 3
Signing in
For Americon staff. Contractors do not have accounts and never need to sign in.
Signing in and where you land
Sign in with your username or email address. Staff land on the calendar dashboard.
Use the Sign in button in the site header. You can enter either your username or the email address on your account.
After signing in, Project Managers and Coordinators are taken to the calendar dashboard, because that is where the day's work starts. Administrators are taken wherever they asked to go.
The old WordPress login screen at /wp-login.php redirects to the branded sign-in page, so a bookmark to either one works.
When sign-in does not work
A wrong password says so. A suspended account says so separately — that one needs an administrator, not a password reset. Ten failed tries locks the connection for fifteen minutes.
- Wrong username or password. You are returned to the sign-in page with a message. Use Lost your password? to have a reset link emailed to you.
- Your account has been suspended. The sign-in is refused with its own distinct message. A password reset will not help; an administrator has to restore the account in User Management.
- You never set a password. New accounts are created without one. The set-password email is the only way in until it is used. Ask an administrator to resend it.
- Too many failed attempts. After ten failures from the same connection within fifteen minutes, further attempts are refused for fifteen minutes. The page says so, and says how long is left.
The lock is on the connection, not on your account: it clears itself after fifteen minutes with nothing to reset and nobody to ring. Your account is not suspended, disabled, or changed in any way by it.
/wp-admin. That is the recovery path, and it is why at least one administrator account should always be kept live.Section 4
The calendar dashboard
The home page of the portal: every project with a bid due date, plotted on a month grid, with the figures that matter above it. Signed-out visitors see public projects only; staff see public and private together.
The headline tiles
A live count of what needs attention now. Each tile is a link into the project list already filtered to exactly what it counted.
A month grid is good at "how does next month look" and bad at "what needs me today". The tiles answer the second question without any clicking, and each one is a link into the matching filtered list.
| Tile | Counts | Goes to |
|---|---|---|
| Closing today | Bids whose deadline falls before midnight tonight. | Public Projects, filtered to today. |
| Closing this week | Bids due within the next seven days. | Public Projects, filtered to this week. |
| Open public bids | Public projects still accepting bids. | Public Projects. |
| Open private bids | Invite-only projects still accepting bids. Staff only. | Private Projects. |
Each tile keeps its own colour whatever the number is — red for today, amber for this week, blue for public, teal for private. A tile showing zero is dimmed rather than recoloured, so the row still reads as four distinct things on a quiet week, and colour still means "this needs you".

Calendar view and List view
Two shapes for the same projects. Calendar answers "how does next month look"; List answers "what closes soonest" and adds search, filters and export.
The same set of projects, presented two ways:
- Calendar — a month grid. Best for seeing how a month is shaped and spotting the days that are stacked.
- List — the projects sorted by deadline, soonest first, with the full search and filter bar, selection, and CSV export.
The choice is carried in the page address, so a link to either view can be bookmarked or sent to someone else and will open in the same view.
Reading the calendar markers
Each marker is one bid deadline. Colour says whether it is public or private, and whether it is close enough to worry about.
A marker sits on the day a bid closes, not on the day work starts. Colour carries two facts at once:
- Blue — a public project, open for bidding.
- Teal — a private, invite-only project. Only staff ever see these.
- Amber — closing soon. Anything inside 72 hours of its deadline.
- Grey — the deadline has passed.
Opening a day
Click a day to list everything closing on it, with a link straight to each project.
Clicking a day opens a panel listing every project closing that day, each one a link to its details page. Press Escape or the close button to dismiss it.
This works with the keyboard as well as the mouse, and on touch screens. There is no hover behaviour to miss.
Subscribing to bid deadlines
Subscribe once and every public bid deadline we post from then on appears in your own calendar automatically. No account needed.
The Subscribe in your calendar button hands the feed to whichever calendar application is registered on your machine — usually Outlook or Apple Calendar — and opens its subscribe dialog.
If that button does nothing, which is common on locked-down corporate machines, use Copy feed URL instead and paste the address into your calendar's "add calendar by URL" option.
- The feed carries public, open bids only. Private projects never appear in it.
- Your calendar refreshes it on its own schedule, typically every few hours.
- When a bid date moves, the existing entry moves. You do not accumulate duplicates.
- Times are published as fixed points in time, so a bidder in Denver sees a Chicago deadline correctly converted to their own clock.
Section 5
Finding projects
Public Projects and Private Projects are the same list over different data, so every control below behaves identically on both. Projects are always sorted by bid deadline, soonest first.
Searching
Matches the project name and its description. Press "/" anywhere on the page to jump straight into this box.
Type a project name or a city and press Filter. The search runs over the project name and description.
Search combines with every other filter rather than replacing them: a search term plus a state plus a due-date preset narrows to the intersection of all three.
/ anywhere on a page that has a search box puts the cursor in it. See the keyboard shortcuts.
Filtering by state
Narrows to projects in one US state. The list is the same on every page of the site, so a state chosen here means the same thing everywhere.
Choose a state and press Filter. Leave it on All states to clear it.
The state comes from the project record, which is why it is a dropdown rather than free text — a project entered as "Wisc." would never be found by someone filtering on WI.
Filtering by trade
Narrows to projects wanting a particular trade. Only appears once Americon has set up its trade list.
Trades are the work packages a project wants priced — electrical, mechanical, sitework, and so on. Choosing one narrows the list to projects tagged with it.
This control is hidden entirely until trades have been created, rather than sitting in the filter bar as an empty dropdown.
Quick filters
One-click versions of the questions people actually arrive with. Press an active one again to clear it.
Closing today, Closing this week and Closing soon are one-click deadline filters. The active one is marked; pressing it again removes it.
They are ordinary links carrying the filter in the address, so any one of them can be bookmarked or pasted into a message and will open showing the same thing.
A chip appears above the list showing which deadline filter is in force, with an × to remove it — so a narrowed list can never be mistaken for the whole list.
Results per page
How many projects to show before paginating. Ten, twenty or fifty.
Sets how many rows appear before the list paginates. Larger pages are worth it when you are about to select rows for export, since selection applies to the page you are looking at.
Include closed
Brings past-deadline and closed projects back into the list. Off by default, and never available to the public.
By default a project drops out of the lists once its deadline passes or it is marked Closed. Ticking this brings them back, which is what you want when looking up a job that has already been bid.
The Public and Private badges
Says whether this project is on the public calendar or reachable only through its invite link.
The badge on each row is the fastest check that a project is where you meant to put it. Public means it is listed on the bid calendar and its link needs no access code. Private means it appears nowhere public and only the invite link opens it.
Copy link to this view
Puts the address of the list exactly as you have filtered it on your clipboard, ready to paste into an email.
Every filter lives in the page address, so the address is the saved view. This button copies it.
Whoever opens it sees the same search, state, trade and deadline filter you had — subject to their own permissions. Send a colleague a link to "everything in Wisconsin closing this week" and that is what they get.
Selecting rows
Tick rows to export just those. Shift-click a second box to take everything in between.
Tick individual projects, or use the checkbox in the toolbar to take the whole page at once.
Shift-click selects a range, the way a file manager or mail client does: tick the first row, then shift-click the last, and everything between them follows.
A bar appears at the foot of the list once anything is ticked, showing the running count with Export CSV and Clear.
Exporting to CSV
Two exports: "Export all" takes everything matching your filters across every page; "Export CSV" in the selection bar takes only the rows you ticked.
There are two, and the difference matters:
- Export all N in the toolbar carries your live filters, not a list of rows. It exports everything matching — including the rows on pages you never clicked through to.
- Export CSV in the selection bar exports exactly the rows you ticked, and nothing else.
The file downloads immediately and opens in Excel or Google Sheets. It carries the project name, location, deadline, visibility, trades and assigned staff.
Row density
Compact fits roughly a third more rows on screen. Your choice is remembered on this device.
Comfortable is the default. Compact tightens the rows so more fit on screen, which is worth it when working through a long list.
The setting is stored in your own browser and applies to every list on the site. It is per-device, not per-account, so choosing it on your desktop does not change your phone.
Section 6
Creating a project
The Create Project form takes a project from nothing to live in one submission. The name, city, state, bid due date and the two people responsible for it are required — everything else can be added later in the editor.
How the form is organised
Overview, Schedule, Contacts, Photo and Plan files are five views onto one form. Nothing is created until you press Create project.
The sections are the same five the project editor uses, in the same order, so creating a project and later editing it are the same screen doing the same work. Moving between sections changes nothing and creates nothing.
Each entry in the rail says what is still needed — "2 to fill" against a section means a required field in it is empty — and the line under the rail counts every required field across all five, including sections you have not opened.

Project name
This is the heading contractors see on the calendar, in the lists and in the subject line of the invite email. Name it the way the drawings do.
The project name appears in more places than anything else on the form: the calendar marker, both project lists, the details page heading, the invite email subject, and the entry in a contractor's own calendar once they subscribe.
Use the name that appears in the title block of the drawings. A contractor who receives an invite for "Devil's Lake Villas" and finds "DL Multi-Unit Phase 2" on the drawings has to stop and check whether they are the same job.
City and state
Both are required. State is what the list filters run on, so it has to be picked from the list rather than typed.
City is free text and appears under the project name in the lists. State is a dropdown because it drives the state filter — a typed abbreviation would make the project invisible to anyone filtering.
Visibility
Public puts the project on the bid calendar for anyone to find. Private keeps it off every public surface and reachable only through its invite link.
This is the most consequential field on the form. It can be changed later, but changing it later means a project was briefly in the wrong place.
| Public | Private | |
|---|---|---|
| On the bid calendar | Yes | No |
| In the Public Projects list | Yes | No |
| In the subscribable calendar feed | Yes | No |
| Details page | Open to anyone | Needs the access code in the link |
| Plan files | Downloadable by anyone | Needs the access code in the link |
Drafts and publishing
Every project starts as a draft, visible only to Americon staff. Publishing is a separate button, and it is the moment the project becomes real to anyone outside.
A project has two independent settings, and they answer different questions. Confusing them is the commonest mistake on this screen, because "private" sounds like it means "not published" and it does not.
| What it decides | |
|---|---|
| Draft or published | Whether the project exists to anyone outside Americon at all. |
| Public or private | Where it goes once published — the open bid calendar, or invite links only. |
So a private published project is live: invited contractors can open it and take the plans. A public draft is not live at all — it is not on the calendar, and nobody outside can reach it even with the link.
While a project is a draft:
- it is off the bid calendar, the subscribable feed and the public lists,
- its plan files will not download, for anyone,
- it sends no deadline reminders,
- invitations cannot be sent — the console refuses, because every link in that email would open the "not found" page,
- and it appears on the staff boards with a Draft chip, and in the "Unpublished drafts" tile on the dashboard.
Publishing is one button at the top of the project screen. On a project marked public it asks first, and states exactly what is about to become visible, including how many plan files.
Trades
The work packages you want priced. Contractors filter the project lists by these, so a project with none set is harder for the right bidder to find.
Tick every trade you want bidding. They appear on the project row in the lists and drive the trade filter.
Leaving them empty does not break anything — the project is still listed and still on the calendar — but a contractor who filters to their own trade will not see it.
Bid due date and time
Required, and it drives almost everything: the calendar position, list sort order, the reminder emails, and when invite links expire.
Pick the date and time from the picker rather than typing, so the value stored is unambiguous. This one field drives:
- where the project sits on the bid calendar,
- the sort order of both project lists — soonest first, always,
- the "closing today" and "closing this week" counts on the dashboard,
- the reminder emailed to plan holders as the deadline approaches,
- the entry in a contractor's own calendar,
- and when the project's invite links stop working.
Estimated start and completion
Optional. Shown on the project page so a bidder can judge whether the schedule suits their book.
Both are optional and neither affects the calendar or any filter. They appear on the project details page, where they answer a question a contractor asks before deciding whether to price the job at all: can we actually staff this, when it runs?
Leave them blank rather than guessing. A date on the page reads as a commitment.
Project manager and coordinator
Both are required when the project is created. They are named in the invite email, and are who a contractor reaches by replying to it.
Both are chosen from portal accounts. They are named on the project details page and in the contractor invite email under "Submitting your bid".
An invitation the portal sends carries a per-project reply address, so a contractor answers by replying to the message and their answer is filed against the job before it reaches either of you. The invitation names the two of you without printing your addresses — a contractor who writes to an address directly is writing somewhere the project record cannot see. There is no longer any way to copy that invitation out and send it from your own mailbox — see The contractor invite email for what replaced it.
- Project manager — responsible for the project and the final bid decision.
- Project coordinator — handles invites, documents and contractor questions.
Naming them is not a permanent assignment — either can be reassigned at any time in the project editor. The requirement is that a project never starts life with nobody answerable for it, because a project sent out with no contacts gives a contractor with a question nobody to ask.
Project photo
Optional. Used as the image on the project page and in listings. Unlike plan files, this one is public.
A rendering or a site photograph. Optional, and purely presentational.
Uploading plan files
Drag files in or browse for them. Large sets upload in pieces, so a big drawing package will not fail part-way through, and you can keep adding while one is still going.
Drop files onto the box or use Browse. Multiple files at once are fine, and each shows its own progress.
Large files are uploaded in chunks rather than in one request, which is what makes a several-hundred-megabyte drawing set survive a slow office connection. If the sign-in token expires during a long upload, it is renewed automatically rather than failing the upload.
- Files land in a protected location, not in the public media library.
- Nothing is served to anyone until the project's visibility and access code have been checked.
- Plan files can be added, replaced and removed later in the project editor.
Dropping more while one is uploading is fine and expected — it is how this form is normally used. The second drop joins the queue behind the first rather than competing with it. Save is the only thing an upload holds; it comes back as soon as everything has finished.
Section 7
Editing a project
Opening any project as staff gives you the editor: the same page a contractor sees, with everything editable. It is divided into sections down the left, because a project with fifty drawings is otherwise one very long page.
The section rail
Overview, Schedule, Contacts, Photo, Plan files, Invite email and Delete. Everything except Invite and Delete saves together with one Save button.
The sections are views onto one form, not separate forms. Moving between them changes nothing and saves nothing; the Save changes button at the foot commits every section at once.
Two sections are separate because they act immediately rather than on save:
- Contractor invite email — copying and regenerating the access link happen there and then.
- Delete this project — its own confirmation, its own action.
Each entry in the rail carries a short summary of what is in it, so you can see the file count or the visibility without opening the section.

The readiness line
Live count of required fields still empty, across every section — including ones you have not opened.
It reads "Ready to save" when every required field is filled, and names how many are still empty when they are not. It checks all sections, not just the one on screen, so a missing city on the Overview section is reported while you are looking at Plan files.
Unsaved changes
Leaving the page with edits in progress prompts first. Filter and search boxes do not count as edits.
If you have changed anything and try to leave, the browser asks before discarding it.
The trade filter, the file filter and the section you are on are excluded from that check — narrowing a list to find something is not an edit, and being asked to confirm it would train people to click through the warning without reading it.
When two people edit the same project
If the project changed while you had it open, your save is refused rather than applied — so nobody's work is overwritten without being seen.
Nothing stops two coordinators opening the same project, and on a deadline afternoon two people on one job is normal. What is checked is the save.
When you press Save changes, the portal compares the project as it stands against the project as it was when your page was drawn, field by field. If nothing you could overwrite has moved, the save goes through exactly as it always has — which is the ordinary case, and you will never see any of this.
If something has moved, the save is refused. Not partly applied, not applied with a warning: nothing is written at all, so the other person's work is intact and yours is not half-landed somewhere.
The notice names who changed the project, how long ago, and which fields your save would have put back to their earlier values. Then:
- The form reloads showing the project as it now stands — their version, not yours.
- Make your change again on top of it and save. The second save goes through.
- Any plan files or a photo you had queued were not attached. Add them again.
The fields watched are the ones the form writes: project name, city, state, visibility, bid due date, estimated start and completion, project manager, coordinator, scope of work, trades, and which plan files are on the project. Actions with their own buttons — publishing, closing bidding, regenerating the access link — write one thing each and cannot silently undo an edit, so they are not gated.
Who can see this project
Switching between Public and Private changes the invite link below immediately, but nothing is live until you save.
Two cards rather than a dropdown, because the two options do entirely different things and a closed dropdown explains neither.
Selecting one updates the invite link shown below it straight away, so the link and the setting can never disagree on screen. A warning appears under the link until you save, because until then the new link is not live.
Scope of work
A line or two on what is actually being bid. It is the field a contractor uses to decide whether to price the job at all.
A name, a city and a deadline tell a contractor where and when. They do not tell them whether the work is theirs. This is the field that does, and it is why an electrical sub can rule a job out — or in — without downloading a set of drawings first.
It appears in three places, from this one box: on the project page under Scope of work, in the invitation email above the estimated dates, and in the plain-text version of that email for contractors whose mail client shows no formatting.
- Say what work is included, and roughly how much of it — "Interior demolition and metal stud framing, 12,000 sf".
- Say the conditions that change a price — prevailing wage, night or weekend phasing, an occupied building, a hard completion date.
- Leave the specification to the drawings. Two thousand characters is the ceiling and far more than the field needs.
Blank lines start a new paragraph and single line breaks are kept, so a short list of trades on separate lines reaches the contractor on separate lines.
The invite link
The URL to send contractors. For a private project it carries the access code, and it is the only address that will open the project.
Use Copy link and paste it into your email. Do not copy the address out of your browser's address bar — for a private project that address may not carry the access code, and a contractor who receives it lands on a page they cannot open.
- Public project — the link is a plain address with no code. Anyone can open it.
- Private project — the link carries a long access code. Anyone holding it can open the project and download the plans, so treat it as the credential it is.
A private project's links stop working 30 days after its bid deadline.
The trade picker
The work packages you want priced — contractors filter the project lists by these. Type in the filter box to find one; filtering only hides rows, so a ticked trade scrolled out of view is still ticked and still saves.
The list runs to several dozen trades, so it has a filter box and a running count of how many are selected. Clear all appears once anything is ticked.
Schedule
The bid deadline and the estimated construction dates. Changing the deadline moves the project on the calendar and re-times its reminders.
Changing the bid deadline takes effect everywhere the moment you save: the calendar, the list order, the dashboard counts, the subscribed calendar feeds, and the reminder schedule.
Closing bidding early, and reopening it
The bid date closes a project on its own. Close bidding ends it sooner — when a job is awarded or pulled — and Reopen bidding undoes that.
A published project closes itself when its bid date passes, and that stays true whether or not anybody touches these buttons. What they add is the ability to end bidding at a different moment from the one on the calendar.
Managers and coordinators both have them. They are one press with no confirmation, because either one undoes the other.
| What decides open or closed | |
|---|---|
| Left alone | The bid date. Checked hourly, in both directions. |
| Closed or reopened by hand | Your decision, until somebody changes the bid date. |
| Bid date changed | The new date takes over again, straight away. |
That last row is the way back. If a bid was closed early and should now run to a new deadline, set the new date in Schedule — it reopens the project and closes it again on the new date, with no second button to remember.
Closing bidding, early or on time, means the project:
- leaves the bid calendar, the open lists and the subscribable feed,
- appears on Closed Projects, where it can still be read and exported,
- sends no further deadline reminders, and drops out of the staff digest,
- and shows Bidding closed to any contractor who opens it.
Closing sends no email by itself. What it does instead is ask: close a bid ahead of its published date and the project screen names the firms who are working on it and offers the notice, already written, with a They already know button beside it. Both answers are recorded; neither is the default.
The offer goes to the people we know are spending money on the job:
- everyone who took the drawings,
- plus any firm that answered We are bidding — they may never have downloaded anything here,
- minus anyone who said they were not bidding, and anyone who has unsubscribed.
Neither button appears on a draft. Nothing is bidding on a project that has not been published.
Replacing the project photo
Uploading a new photo replaces the current one. The photo is public even on a private project.
Choosing a file replaces the existing photo when you save.
Managing plan files
Every attached file has a Keep box. Unticking one removes the file from the project when you save — nothing is removed until then.
Each attached file shows its name, type and size, with a Keep checkbox. Files stay attached while their box is ticked; unticking one and saving removes it from the project.
Past six files the list gains its own filter box and a Keep all button, and past eight it gets its own scroll so it cannot swallow the page.
File versions and revision labels
The version number is automatic — v1 on upload, v2 the next time a file of the same name lands. The label is free text on top of it: write whatever the drawing's own title block says.
Every plan file carries a version and a date, both set by the portal. A file uploaded for the first time is v1. Upload a file with the same name again and it becomes v2, then v3, and so on. You never type the number.
A replacement takes the old file's place in the list rather than sitting beside it, and keeps its displayed name, so nobody is ever shown two rows called "A-201.pdf" and left to guess. The file it replaced leaves the list but is not deleted — the save confirmation says so each time it happens.
On top of the version, each file can still carry a revision label: free text, and optional. "Rev B", "Addendum 2", "2026-08-04 reissue". Construction has no single convention, and the label on the portal has to match the label in the title block of the drawing itself. The paper wins — so when a label is filled in, it is what contractors see in place of the version number.
There are two ways to issue a revision, and both end in the same place:
- Press Replace on the file's row and pick the new drawing. This states outright which sheet is being superseded, so it works no matter what the new file is called. Use it whenever the reissue arrives under a different name — "A-201_RevB.pdf" for "A-201.pdf".
- Upload a file with the same name. Picked up on its own, no button needed. Unticking Keep on the old row in the same save works too and counts as the same replacement — you never have to save twice.
A row that has been revised gains an earlier issues line you can open. Every superseded drawing is listed there with its version, its label, the date it was replaced and a link to the file itself. Nothing is ever deleted, and this is where it stays.
Download all
Packages every plan file into one ZIP. A large set takes a minute to compress — leave the tab open while it works.
Rather than downloading forty drawings one at a time, this compresses the whole set into a single ZIP.
- You are asked to confirm first, because a large set is a large download.
- A progress message appears while the archive is built.
- Do not close or refresh the tab while it is preparing.
- If it takes longer than expected you are told so, rather than being left with a page that appears stuck.
The contractor invite email
A ready-made, branded email built from this project. Preview it here, then send it from the portal so the job can say who was asked.
The email is built from the project: name, location, bid deadline with its time zone, the plan documents, the manager and coordinator with their email addresses, and a button to the project — carrying the access code when the project is private. Where the directory knows the contact, it opens by name.
Choose who to invite is the way out of this panel. You pick contacts and groups, see who is excluded and why before anything goes, and the project remembers who was asked. Each firm gets their own link, so an opening can be attributed to a company, and replies reach the project manager rather than the website.
The preview shows exactly what will be sent, clipped to a readable height. Show the whole email expands it. This is the cheapest place to catch a wrong bid date.

Choosing who to invite
Pick contacts by group, trade or name, and add addresses by hand. Nothing is sent until you have seen the review page.
The list opens narrowed to the trades on this project, shown as chips above it. Remove a chip to widen the list; clear them all to see every contact. The line above the list always says how many contacts the filters are hiding, so the list is never quietly shorter than you think.
- Tick rows to choose them. Shift-click picks a range.
- The list follows your typing. There is no Apply to press — narrow the search or take a chip off and the rows underneath change, along with the count and the pager. The filtering is done on the server, so Select all matching still means every contact behind the page and not the fifty on it.
- Ticks travel with you. Search again, turn the page, remove a chip, come back from the review — whoever you have ticked stays ticked, and anyone the current view no longer shows is listed under Also selected at the foot of the list, where they can be unticked. To take everything the filters match in one go, Select all matching is still the faster control.
- Groups and trades narrow together: picking the group "Southern Wisconsin regulars" and the trade "Concrete" gives you the concrete subs in that group, not both lists added together.
- Addresses typed into the box at the bottom are invited and added to the contact list, so nobody has to retype them next time.
Contacts who cannot be written to still appear, greyed, with the reason in place — already invited, unsubscribed, or a dead address. They are shown rather than hidden so that "why didn’t Bob get it?" is answered while the list is still in front of you.
The review step
What pressing Send would actually do, before it does it: who receives an invitation, who is excluded, and why.
These recipients are outside contractors on a live bid. A send reaches all of them at once and cannot be recalled, so everything the portal knows that you do not gets a page of its own first.
- First invitation — firms that have not been told about this project.
- Revised plans — firms already invited, being told that the drawings or the bid date have moved since. They get the invitation again under a heading saying why.
- Already invited — nothing has changed for them, so they are left alone.
- Unsubscribed or bounced — addresses we may not or cannot write to.
- Listed twice — reached through more than one route in this selection, and invited once.
Add a note to this invitation puts a paragraph of your own into the invitation itself — *“Addendum 2 is already posted”*, *“we are targeting a GMP by the 30th”*. It goes to every firm listed above, so it is for something they all need to know.
Send a test to myself first sends the real message for this real project to your own address only — including your note. It is the cheapest way to catch a wrong date or a missing drawing, and it leaves your selection intact.
The last step names them. Under the count, Where each one went lists every firm in that send with what became of its message beside it: Waiting while the queue is still working through them, Server accepted once it has gone, and anything that came straight back sorted to the top. It is one send and not the whole history of the job — the full list is Who has been invited — and Server accepted means the same thing here as it does on that screen: the receiving server took the message, which is not the same as somebody reading it.
When invitations will not go out
Invitations are held until the bid mailbox has been read once, so every firm on a job is given the same reply address. One press by an administrator clears it for good.
Invitations cannot go out yet at the head of the invitation screen means one thing, and it is not a fault on this project: the bid mailbox has never been read successfully, so the portal will not print a reply address it cannot yet prove anybody is collecting.
It is drawn on the step where firms are chosen and again on the review, deliberately early — the cost of it appearing late is an afternoon spent building a list of four hundred that cannot be sent. While it stands, Send cannot be pressed, and Send again on a single firm's row is refused for the same reason.
The remedy is one press by an administrator: Tools → Americon Bid Mailbox, then Read the mailbox now. It has to succeed once and is never asked for again. Nothing is being switched on — the mailbox is simply proving it can be read before four hundred contractors are told to write to it.
Writing to one firm
A message to a single invited contractor, sent from the portal so it is on the record.
For the thing you would otherwise open Outlook to write: *“We would especially like your number on the sitework package”*, or a question about a bid that has not arrived. It goes to that firm alone.
Reached from Reply on a contractor’s message, it answers that message properly: the question is shown above the box so you are not answering from memory, the subject is filled in as a reply to theirs, and what they wrote is quoted underneath your answer. In their mail client it arrives in the same conversation rather than as a separate email — so a firm that asks three things about one job sees one thread, not three loose messages.
Sending an answer this way marks the question answered — you do not have to go back and press anything. That is the whole reason to answer from here rather than from Outlook: the press that gets forgotten is the one that leaves a question sitting on the worklist with a deadline running against it.
Sent from the portal, it carries their own link to the project, replies reach the project manager, and it lands on that firm’s delivery history with whatever the mail server said about it. Sent from Outlook, none of that is true and there is nothing three weeks later saying you wrote to them at all.
What you type is kept. The firm’s row on Who has been invited gets a Messaged mark, and opening it shows the message in full with the date and your name on it — so "did we tell them the sitework was split out?" is answered from the project rather than from somebody’s Sent folder.
- The project name, the bid date and their link are added for you — write only your own words.
- It does not re-send the invitation. Send again on the same row does that.
- It does not change what the firm has been told about revised plans, so it will not remove them from the list of people who still need to hear about a change.
Telling contractors about a change
When the bid date moves or plans are revised, the project says how many invited firms have not been told. Sending is still your decision.
The portal records what each firm was told: the bid due date, and the plan files with their revision labels. When either changes, everyone invited under the old version is counted as not yet told, and the project says so until somebody acts.
It is never sent automatically, deliberately. Saving a project is not a decision to email forty-seven firms — a revision is often uploaded in pieces over an afternoon, and each save would be its own blast. An unwanted email cannot be recalled.
- Correcting a spelling, a description or a job title tells nobody. It is not something a contractor would do anything differently about.
- A moved bid date and revised or added drawings both count.
- Removing a drawing is reported but does not re-invite anyone: there is nothing for them to act on.
“The deadline they were shown cannot be confirmed.” On a few older projects the reason given is this rather than a change. It means the firm was invited before the portal kept a change trail, so there is no record of which bid date was in front of them — not that anything has moved.
- It is shown because the honest answer to “have they been told?” is that we cannot say, and a record that quietly assumed either way would not be worth having.
- Contractors never see that wording. If you do re-send, the invitation reads simply as updated.
- Re-sending clears it: the firm is then recorded against the project as it stands today.
Trade coverage
Whether the trades this job is tagged for have anybody invited, and anybody bidding. It only appears when something is missing.
Every other count on this portal is measured in firms. A job needs trades, and five trades covered out of six looks identical to six out of six on every other screen — forty-seven invited, all healthy, and nobody at all pricing the electrical.
This is the only check that asks whether the bid will actually work. It compares the trades on the project against the trades on the contacts who were invited.
- Nobody has been invited for X — a mistake, and one you can fix this afternoon by inviting people. Shown as a warning.
- No contact in the directory does X — nobody to invite yet. A different problem with a different remedy, so it is worded differently: add contacts, or the trade tag is wrong.
- Invited but nobody bidding yet — a risk, not a mistake, and usually just week one. Shown quietly, because a screen that shouts at the normal state of a bid on its first day is a screen people learn to scroll past.
The trades that are covered are left out entirely. This panel is silent on a healthy project, on purpose — it has to still be legible on the morning it says something that matters.
Who is actually bidding
Contractors answer “are you bidding?” from their invitation email. Silence is not a decline — it usually means nobody has opened it yet.
Every invitation carries a Will you be bidding? panel under the plan documents button, with two answers in it: Yes, we are bidding and Not this one. The answer lands on the invitation record against that firm, and the line above it counts the three states.
- Bidding — expect a number from them, and they are told first when anything changes.
- Not bidding — they have passed on this one job. They stay on the invitation list and will hear about the next.
- No answer — the commonest state, and not a decline. Usually nobody has opened the invitation yet.
"47 invited" is not coverage. Eleven bidding is coverage. Three days from a deadline those two numbers tell you completely different things, and before this existed both looked the same on every screen.
A contractor can change their answer at any time by following the link again — a firm that declined in week one and finds capacity in week three needs to be able to say so. Every change is recorded, so "when did they say they were out" has an answer after the job is awarded.
A contact who cannot be invited
Bounced addresses are fixed by entering the correct one. Unsubscribes can only be reversed by the firm asking — and the note you write is the record of them asking.
A contact is greyed out and unselectable for one of two reasons, and they are not the same kind of problem. Fix this on the row opens the right remedy for whichever it is.
The address bounced. The receiving server said no such mailbox — usually a typo, somebody who has left the firm, or a domain that changed. Enter the address that is actually correct and it replaces the one on the contact.
- Retyping the same address is refused. We have the receiving server's word that it does not work, so retyping it changes nothing.
- The old address stays on the do-not-mail list. It still does not work, and the next person to type it by hand should get the same warning you did.
- An address already belonging to another contact is refused, because saving it would merge the two firms into one row and the losing firm would drop out of every group it was in.
The address is right and the bounce was wrong. This does happen — a mailbox created that morning, a receiving server misconfigured for a day, a domain part-way through a move. The panel underneath clears the block, and asks you to write down how you know. That note is recorded against your name, and if mail to the address fails again it is blocked again.
The firm unsubscribed. There is no address field here, because nothing about the address is in question — they asked us to stop. Only they can reverse that, and only by asking.
- If they have asked, record how: a phone call and roughly when, an email, a conversation on site.
- Wanting them to bid is not consent. Neither is a colleague saying they are probably fine with it.
- That note is what the portal will show if anyone ever asks why an unsubscribed firm was written to again.
Your selection
A running count of what you have chosen and what it would do, so you do not have to reach the review page to find out.
The panel beside the list keeps up with what is ticked. It changes nothing and sends nothing — it is the answer to "what have I actually got here" while you are still building the selection.
- What would happen splits the selection into firms that have never seen this job and firms already invited who would be told what has changed since. Those are different messages, and the balance between them is usually the thing worth checking.
- Reached by shows which group chip brought in each part of the selection, biggest first. This is how you catch a chip you did not mean to leave ticked — twenty firms arriving from a group you forgot about show up here as a line with a number beside it.
- Not selectable on this page counts the rows the list is showing but will not let you tick: already invited, or blocked. Each one is greyed in the list with its reason on the row.
Contacts added by hand appear under Reached by as "Added by hand", because a firm nobody's group named is worth being able to see.
Who has been invited
Every firm on this project, when it was asked, what became of the message, and whether they said they are bidding. Click a row to read everything exchanged with that firm.
This is the solicitation record for the job — the list to open when somebody asks who was invited, and the list to open when one of them cannot find their email.
The tiles across the top are where the bid stands: how many firms said they are bidding, how many said they are not, and how many have not answered. A fourth tile appears once a bid has actually been marked as received. Those figures are what tell a healthy bid from one where everybody passed — both are the same number of firms invited.
Two of the columns are easy to confuse and are deliberately separate:
- Invited is the date this firm was brought into the bid. It never changes, no matter how many messages go out afterwards. It is the date that matters if the job is ever audited for good-faith solicitation. Underneath it is how the firm came to be on the list — the group that named it, or "Added by hand".
- Delivery is what became of the last message to them — whether the contractor’s own mail server accepted it, delayed it or bounced it. The line under that badge counts the invitations: a firm invited in June and sent revised plans in July reads "2 invitations", with the date of the last one.
Where there is something recorded, click anywhere on the row to open that firm’s Delivery history — every message sent to them on this job, every reply, and the whole exchange in order. The firm’s name, the delivery badge and the messaged mark are all links to the same screen, so ctrl-click or the middle button opens it in a new tab and you keep your place in the list.
A Messaged mark under that line means somebody here has written to this firm in their own words, and it says when and how many times. It is only on the rows it is true of, so it is worth scanning for. Open it to read what was said.
Bidding? is what that firm has told us, from the buttons in their own invitation: bidding, not bidding, or no answer yet. Silence is not a decline — it usually means nobody has opened it. Under that badge is Mark bid received, which records that their numbers turned up; it sends nothing, it can be undone from the same spot, and both directions are on the audit trail.
A firm with nothing marked beside its name holds the current version of the bid. Only the exceptions carry a badge there: Not told what changed means the drawings or the deadline have moved since they were last written to, and Will not receive mail means the address unsubscribed or bounced.
Send again re-delivers the invitation to one firm. Use it when a contractor deleted the email, never received it, or is holding a link that no longer opens.
- It does not change the Invited date, and it does not create a second invitation.
- If the plans or the deadline have moved since they were invited, the message they get says so in the first line — they are not sent a stale invitation quietly.
- Firms who unsubscribed or whose address bounced show the reason in place of the button. That refusal cannot be overridden from here, because it is not ours to override.
- The same address cannot be sent to twice within a few minutes. Mail takes that long to arrive, and a second copy does not make the first one faster.
Message writes to that firm on its own, in your own words — the thing you would otherwise open Outlook for. It does not re-send the invitation, and it does not change what they have been told about revised plans. See Writing to one firm.
Download the record saves the whole thing as a spreadsheet — every firm asked, every message, and every outcome. That is the version to hand to an owner or an auditor; see The solicitation record, as a file.
Proving an invitation was sent
The whole exchange with one firm about this job — what they wrote, what was written back, when each message left and what their own mail server said.
This is the answer to the phone call that starts "we never got the invitation". It shows the address the portal wrote to, the date and time each message left, and the reply from the mail server on the other end.
The conversation about this job comes first, when there is any: what the firm wrote to the bid address and what somebody here typed back, in one list, newest at the top. That is the answer to the other question this screen gets asked — not "did it arrive" but "what did we actually tell them". Clicking a subject on a project’s Correspondence panel lands you here, on that message.
The two halves are not held the same way, and the screen says so. Our side is the prose that was typed, in full, with the date and the person who wrote it. Their side is the opening of their message: the portal records that it arrived and how it began, and the message itself, with anything attached to it, stays in the bid mailbox and is never deleted from it.
Elsewhere with this firm follows: the same exchange on the other jobs they have been invited to, so a question you are about to answer can be checked against the one they asked in March. This job is left out of it — it is already above, in full.
Invitations and revision notices are in neither list; they are the ones the portal composed, and they are in the table underneath with everything else.
The outcomes mean different things and call for different replies:
- Accepted by their mail server — their end took the message. Ask them to check their junk folder before it is sent again.
- Their mail server delayed it — a temporary refusal, usually greylisting or our own hourly limit. It is retried.
- Bounced back — refused outright. The address is wrong or gone, and the right fix is a new address rather than another attempt.
- Sending failed — the message never left us. Worth raising, and worth sending again.
Two lines on this screen mean the portal cannot tell you, and they are deliberately not written as failures:
- Sent before delivery logging began — the invitation went out before the portal started recording outcomes. The invitation itself is still on the record with its date; there is simply nothing to show about its delivery.
- No delivery record — the invitation record says a message went out after logging began, and no message was logged. Those two disagree. Raise it before promising the contractor anything.
The solicitation record, as a file
A spreadsheet of every firm asked to bid this job and what happened to each message — the version to hand to an owner or an auditor.
The screens answer a question somebody is asking now. This answers the one asked months later by somebody who was not in the room: show me that this job was solicited widely, and show me the evidence. It downloads as a spreadsheet you can attach to an email or file with the bid tab.
One row per message, plus a row for every invited firm the delivery log has nothing for. The columns are:
- Firm, Email and Invited — who was asked and when. The invitation date is the fact a good-faith effort is judged on, and it is in the file whether or not there is a delivery outcome beside it.
- On the invitation record — "No" marks mail this site sent about the job that was not an invitation: a plan-holder notice, or a coordinator’s test send. They are included so the file is a complete account rather than a selection.
- Outcome and What the mail server said — the same words the Delivery history screen uses, and the recipient’s own reply where there was one.
When a contractor loses their invite link
They can get it back themselves from the portal, or you can send it from Who has been invited. Never regenerate the access code to fix one lost email.
This is the commonest support call on the portal, and there are three ways to answer it. Two of them are right.
- Let them do it. A contractor who follows a dead or missing link lands on a page offering Send my invitation again. They enter the address the invitation was sent to and it goes back to that address. Nobody at Americon has to be at their desk, which matters most on a deadline afternoon.
- Do it for them. Open the project, go to Who has been invited, find the firm and press Send again. This is the route when they are on the phone, or when the address they are asking from is not the one that was invited.
The self-service page never says whether an address was recognised, and that is deliberate: a page that confirmed it would be a way for a competitor to learn who is bidding a job. It shows the same sentence either way, so a contractor who typed the wrong address sees exactly what one who typed the right address sees.
The commonest genuine failure is not a lost email at all. The invitation went to the office manager and the estimator is asking from their own address, which was never on the list. The self-service page will find nothing — invite the estimator's address properly instead, so the record shows they were asked.
Send everyone the new link
The other half of regenerating the access code: puts a working link back in the hands of everyone already invited.
Regenerating the access code stops every link already sent. This is how the firms who should still have access get a working one back.
It is a separate press rather than part of regenerating, on purpose. The usual reason to regenerate is that a link reached somebody it should not have — and re-sending automatically in the same click would mail a fresh link straight back to them. Rotate first, look at who is on the record, then decide.
- Every firm on the invitation record is sent the invitation again, carrying the current access code.
- The date each firm was first invited does not change.
- Unsubscribed and bounced addresses are excluded, and you are told how many.
- If an invitation run is still going out, this refuses rather than taking it over — starting a second run would abandon the first one part-way.
Invite reach
How many distinct people have opened the invite link. Zero opens two days before a deadline is a delivery failure, not a quiet week.
Invites are sent from a personal mail client to a distribution list, so nothing about their delivery comes back to the portal on its own. This is the one number that separates "nobody is interested" from "the mail never arrived".
It counts distinct devices that opened the link, plus when the first and most recent open happened. A stale list, a message filtered as spam, and a link pasted wrong all look identical from here — and all three are still fixable if you notice before the deadline.
- Shown on private projects only. A public project is on the calendar for anyone to find, so its open count says nothing about whether an invite was delivered.
- No IP address, browser or referrer is stored. A device is reduced to a one-way hash purely so one person refreshing four times counts once.
- That list is capped, and discarded when the bid closes out.
Regenerating the access link
Issues a new access code and kills every link already sent. Use it when a private link has gone somewhere it should not have.
This is the revocation control. Pressing it issues a fresh access code; every invite link handed out up to that moment stops working immediately.
Once you have regenerated, Send everyone the new link appears below it. That is how the firms who should still have access get a working link back — the invitation screen will not do it, because it skips everyone already invited.
Every regeneration is recorded — who did it, when, and why — so the question "when did that link stop working" has an answer later.
A public project has no access code and nothing to regenerate; the panel says so instead of offering a button that would do nothing.
Deleting a project
Moves the project to the Trash. It leaves the calendar and every list at once and invite links stop working. An administrator can restore it.
Deleting is recoverable — the project goes to the WordPress Trash, not to nothing — which is why both staff roles are allowed to do it. You are asked to confirm, and the panel tells you how many plan files are attached before you decide.
The moment it is deleted:
- it disappears from the bid calendar, both project lists and the subscribable feed,
- its invite links stop working,
- and contractors holding those links lose access to the plans.
Section 8
Plan holders and notifications
A plan holder is a contractor who has taken the drawings. Keeping that list is the only way the portal knows who to tell when something changes — and telling them is the whole reason it is collected.
Who has taken the plans
Contractors who identified themselves before downloading, with when they took the plans and whether they have been told about changes since.
Each row is a contractor who filled in the short form before downloading: company, contact name, email, when they took the plans, and when they were last notified.
The Notified column is the one to read before issuing an addendum. "Not yet" means that contractor has heard nothing from the portal since they downloaded.
Notify these plan holders
Emails everyone holding the plans. Write only what changed — the current revisions, the bid date and a project link are added for you.
This is what the plan holder list exists for. Use it whenever a drawing is revised, an addendum is issued, or the bid date moves.
- Open Notify these plan holders.
- Check the subject, which is pre-filled with the project name.
- Under What changed, write only the change itself: *"Addendum 2 has been issued. Sheets A-101 and A-102 are superseded."*
- Press Send to myself first and read the result.
- Then press Send to all N.
Added to every message automatically: the current plan revisions, the bid due date, a link to the project, and an unsubscribe link. You do not need to write any of it.
Sending happens in the background in batches, so a long list does not depend on you keeping the page open. A progress line reports how many have gone and how many remain; you can leave the page and come back to it. Contractors who have opted out are skipped automatically.
Automatic reminders
Plan holders are warned before their bid closes, and coordinators get a morning summary of what closes today. Both happen on their own.
Two things go out without anyone pressing anything:
- To plan holders — a warning 48 hours before their bid closes, because the failure mode is quietly missing it.
- To coordinators — a morning summary of what closes today and what is closing within the week, because the failure mode is a package nobody was watching.
Every project records which reminders it has already sent, and that record is checked before each send — so a reminder cannot go out twice even if the site's scheduler runs a job more than once.
Reminders go through the same sending path as manual notifications, which means opt-outs are honoured in both.
Section 9
The contact directory
One shared list of everyone Americon invites to bid, replacing the distribution lists that used to live in individual Outlook profiles.
What the directory is for
Everyone shares one list. A contact added or corrected here is corrected for every coordinator, on every job, from that moment.
Invitations used to go out from whichever distribution list the sending project manager kept in their own Outlook profile. That list was private to one person, left with them, and could not be reported on — so nobody could answer "who did we invite to this job?" a month later.
This is that list, held once and shared. Search by company, name or any part of an email address; narrow by trade, city or state; open a contact to correct it.
- One row per person, not per company. Two estimators at the same firm are two contacts, invited independently.
- Search is a substring — typing
acmfinds *Acme*, and typing the middle of an address finds it too. - The list follows the typing. It narrows a moment after you stop, over the whole directory rather than the page in front of you, and emptying the box puts everybody back. The *Filter* button still works and does the same thing.
- Ticks travel with you. Contacts you have ticked stay ticked through a search, a sort, a page turn and opening a contact — and any the current filters no longer show are listed under *Also selected* at the foot of the table, where you can see them and untick them.
- Inactive contacts are hidden by default. Switch Status to *Both* to see them.
- Click a column heading to sort by it, and again to reverse it. The sort stays with you through the filters, the pages and opening a contact. On a phone the headings are not on screen, so the same columns appear as a row of *Sort by* buttons above the list.

Two of those columns are worth knowing about. Location sorts by the town, because that is what the column shows — to work by state, use the state filter, which is the tool for it. Reachable starts with the problems at the top, since finding the addresses that have stopped working is the only reason to sort by it.
What a firm has done, and what was said
Under the details somebody typed about a firm are the two things the firm did: their record across every job, and every message to and from them.
Everything in the form above a contact is what one of us wrote down about them. The two panels underneath are the parts they wrote themselves, and they are what the page is actually opened for between bids — deciding whether to ask this firm again, or working out what to say to one that has gone quiet.
Their record with us counts across every job: how many they were invited to, how many they opened, where they said they were bidding, where they passed, and where they never answered. Bids marked received are counted on a line of their own, and only once there is one — a permanent "0 bids received" beside a firm's name is an accusation made out of a column nobody was filling in a year ago.
Under the counts, where it applies, is the sentence they add up to. Three firms can look identical in those numbers and be three different problems, so the panel says which:
- Mail to this address is not arriving — their server has refused everything and accepted nothing. That is the address, not the firm: the wrong contact, somebody who has left, a mailbox that no longer exists. It has been counted as invited on every job in the meantime, so the coverage figures for that trade have been overstating themselves for as long as it has been wrong. Worth a phone call and a corrected address.
- Nobody has ever opened an invitation from this address — and where the mail log shows their server accepted the mail, it says so. What happens after a server accepts a message is not something this portal can see, and the difference between saying that and not saying it is the difference between a prompt and an accusation.
Conversations is the other half: everything this firm has written to the bid address, and everything written back to them from a job, in one list in the order it happened. Each entry names the job, says whether it was marked a bid or a question, counts what was attached, and shows the opening of what was written. Older messages beyond the most recent are not listed here — they are still on the jobs they belong to.
The same Their record with us panel appears on the delivery screen inside the invitation console, drawn from one place so the two cannot word it differently.
The email address is the contact
One contact per address, and the address is what identifies them. Changing it does not update a person — it makes a different contact.
A contact is identified by their email address and nothing else. Two people cannot share one address in the directory, and one person with two addresses is two contacts.
That is deliberate. You can only send one message to estimating@acme.com however many people read it, so a second row would mean inviting that firm twice.
- A shared estimating mailbox holds one name — whoever was entered most recently. That is normal and nothing needs doing about it.
- Somebody who changes firms gets a new address, so they arrive as a new contact. Their old one keeps its history until it starts bouncing.
- Names are not treated as important. People spell them differently and misspell them; as long as the address is right, the contact is right.
Trades, and why they come from a list
Chosen from a fixed list rather than typed, so a filter finds everyone. Ticking several means ANY of them, not all.
Trades are picked from a list a manager maintains, not typed in. Free-form tags look easier and fail quietly:
| Typed | Contacts |
|---|---|
| Electricians | 31 |
| Electrical | 12 |
| Electric | 4 |
| electrician | 2 |
Filtering "Electricians" there returns 31 of the 49 people meant, and nothing anywhere says so. A filter that quietly returns two-thirds of the right answer is worse than one that returns none, because nobody double-checks a plausible result — and the cost lands as a subcontractor who stopped being invited without anyone deciding that.
The number beside each trade is how many active contacts carry it. Read it before filtering: it tells you whether an empty screen means the filter is wrong or the trade genuinely has nobody in it yet.
A trade accumulates on a contact over time as people learn what a firm actually does. Importing never removes one — that is done here, on the contact, where you can see what you are taking away.
Getting contacts out of Outlook
Export your contacts folder to CSV and upload it. Nothing is written until you have seen a preview of exactly what it would do.
Two ways in. Use the file unless you cannot.
- Upload a CSV. The normal route, and the only one that carries phone numbers, companies and Outlook categories. In Outlook: File → Open & Export → Import/Export → Export to a file → Comma Separated Values, then pick the contacts folder. Google Contacts and any spreadsheet export the same shape.
- Paste a list of addresses. For a distribution list, which is a single item stored *inside* a contacts folder rather than contacts in it — so the export either skips it or emits one row with everybody mashed into a field. Addresses that live only in the Global Address List are the same.
To get a distribution list out of Outlook: start a new message, drop the list into the To: field, press the + beside it to expand it into individual people, then select the whole field and copy. Paste that in.
The paste box understands what actually comes off the clipboard — Bob Smith <bob@acme.com>;, the bracketed form, bare addresses, one per line, or all on one line. A name in front of an address is kept as the contact name.
Taking contacts out, and moving them between sites
The button says how many contacts it will write. That number is what your filters are showing — if it is lower than you expected, a filter is on.
Export all N writes every contact matching your current filters to a CSV — not just the page you are looking at. It opens in Excel or Google Sheets, and it is written in the shape this site's own importer reads, so it can be loaded straight into another copy of the portal.
Read the number on the button before pressing it. It is the same count as the line above the list, and it is there because the contact list opens filtered to Active. An export taken without noticing that is missing every inactive contact, and nothing in the file says so.
To move contacts from one site to the other: export here, then use Import contacts on the other site and upload the file. Contacts are matched on their email address, so re-importing is safe and updates rather than duplicates.
Three things deliberately do not travel with the file:
- Status. It is in the file so you can read it, but the importer ignores it and every contact arrives Active. Deactivating a firm is a decision somebody makes on the contact, not something a spreadsheet column does silently.
- Who has been sent what, and who opened it. That is a record of messages *this* site sent. Carrying it across would make the other site claim a history it does not have.
- Anything you left out of the file. An import never clears a field the file has no column for, so a partial export cannot wipe phone numbers or trades already entered on the other side.
americon-contacts-bidding-… or …-dev-…. Two exports in one downloads folder are otherwise indistinguishable, and importing the wrong one merges the wrong directory in.Reading the import preview
Set which column means what, then read the sentence at the top: it says exactly how many rows would import and how many need you first. Nothing is written until you press the button.
An Outlook export has around ninety columns and you need six of them. The recognised ones are matched automatically; everything else stays on Do not import, which is the correct answer for it.
Change any dropdown and press Update the preview to see the effect. Nothing is written by that.
Read the sentence at the top of the summary first. It says what pressing the button would do — *"78 of 94 rows would be imported. 16 need a decision from you first."* It is coloured for the answer: green when the whole file imports cleanly, amber when something wants looking at, red when nothing would be imported at all. Everything below it is the evidence it was drawn from.
Then the counts, which always cover every row in the file:
| Count | What it means |
|---|---|
| New contacts | Not in the directory. They will be added. |
| Already here, updated | Matched on their email address. Only fields that differ are changed. |
| Repeated in the file | The same address twice. The first one is used and the rest are skipped — worth fixing in the file rather than here. |
| No usable address | No email, or not a real one. A contact who cannot be emailed is not a contact this directory can use. |
| Cannot be mailed | Bounced or unsubscribed. Still imported, still flagged. |
| At our own domains | Colleagues and conference rooms. Left out unless you say otherwise. |
Findings appear below the counts when they apply. None of them stops the import:
- Addresses inside our own organisation. The one finding that changes what gets written — see [[contacts-import-internal]].
- Contacts per email domain. Not a problem, just a census. A file that is mostly one or two domains is somebody's whole mailbox rather than a bidder list.
- Categories that are not trades yet. Outlook categories that are not on the trade list, with how many contacts carry each. This is the useful half of the trade list being fixed: add the ones worth having and import again.
- States that were not recognised. Full names like *Wisconsin* are converted for you. Anything left over is imported with no state, so those contacts will not appear in a region filter.
- One firm, spelled more than one way. Contacts at the same email domain filed under different company names, which makes one firm look like two everywhere. Nothing is corrected automatically — which spelling is right is your call.
Finding the rows that need you. The table lists the file in its own order, which is how you find a row again in the spreadsheet — but twelve problems among four hundred rows are invisible that way, and the table stops at a hundred. Switch it to Needs a decision to list only those, however far down the file they are.
Under the table, Copy the flagged rows opens a plain-text block: every flagged row with its address and its reason, all of them, not just the first hundred. Paste it beside your spreadsheet and work down it. Fixing the source file means the next import is clean as well, which patching contacts afterwards does not.
Why our own addresses are left out
Colleagues and conference rooms are not bidders. They are skipped unless you untick the box.
An Outlook export is usually somebody's whole address book, so it arrives full of colleagues. The first real one tried here held 94 contacts and every single one was internal — staff at our own domains, plus three conference-room mailboxes. Not one subcontractor.
Nothing about that file is broken, which is the point. Every row reads correctly and the preview reports 94 healthy new contacts. Committing it would have put the whole company in the bidder directory, and the next project invitation would have gone to all of them.
So two kinds of address are recognised and left out by default:
- Our own mail domains — the domain we send bid invitations from, and the domain this site runs on.
- Microsoft 365 tenant addresses ending
.onmicrosoft.com. Nobody puts one on a business card; they are room and resource mailboxes.
Sibling companies are not detected, because nothing in the software can know which other firms are ours. Instead the preview shows a count of contacts per email domain. A file that is mostly one or two domains is somebody's mailbox rather than a bidder list, and that census is what makes it obvious at a glance.
Groups: a selection you save once
A saved set of contacts, so the same twenty firms need not be rebuilt from filters every time.
A filter answers "who is a roofer in Monroe County". A group answers "who do we actually send this to" — which is a judgement, not a query, and it is worth keeping once somebody has made it.
Name it after the selection it saves: *Southern Wisconsin regulars*, *Concrete shortlist*, *Municipal work*. Groups are optional and earn their keep once the same firms go on invitation after invitation.
There are two ways to put contacts in a group, and for anything more than one firm the first is the one to use.
- From the contact list, in bulk. Filter to what you want, tick the rows, and use Add to group on the bar that appears. Shift-click picks a range. If the filters match more contacts than one page shows, Select all N matching takes the whole set including the pages you have not looked at. You can type a new group name straight into the bar instead of picking one — the group is created and filled in the same press.
- From a single contact. Open a firm and tick the groups it belongs to. This is the right direction when you are already looking at one contact and know which lists it belongs on.
The count on the bar is what will be changed, and it is worked out again at the moment you press the button — so it acts on the contacts the filters describe, not on a number that has gone stale.
- Add to group skips anybody already in it, and tells you: "12 added, 40 chosen" means 28 were already there.
- Remove from group takes the selection out of the group. It cannot delete a contact or a group — only the membership.
- Renaming keeps every member. The name is a label on the group, not its identity.
- Deleting forgets the grouping and nothing else — every contact stays in the directory. It asks you to type the name first, because a group is shared and the person deleting it may be the only one who thinks it is finished with.
- Clicking a group name shows its contacts, filtered. Adding a contact from there pre-ticks that group.
Adding and changing trades
The closed list every contact is filed under. Add the ones you actually filter by.
The trade list is closed on purpose. Free text gives you *Concrete*, *concrete* and *Concrete Work* as three separate filters, and a directory where the filter misses a third of the firms is worse than one with no filter at all.
So extending it is deliberate, and done here rather than beside the checkboxes on a contact — a trade added there would look like a property of that one firm, which is how a list ends up carrying *Concrete (Baraboo)*.
| Action | What happens to contacts |
|---|---|
| Add | Nothing yet. The trade becomes tickable on every contact. |
| Rename | Nothing. Every contact classified under it keeps that classification — the label changes, the classification does not. |
| Remove | Nothing. Contacts keep the classification, so adding the trade back restores the filter exactly. |
That last row is why removing a trade asks for no confirmation: it destroys nothing. Deleting a group does ask you to type the name, because that one cannot be undone.
Inactive, and deleting
Inactive is almost always the right choice: it keeps the contact and its history and takes them out of every selection.
Inactive hides a contact from the default view and leaves them out of selections, while keeping the company, trades, phone number and the record of every job they were invited to. It is reversible.
Delete removes the contact outright. There is no undo, and everyone shares this list.
Deleting asks you to type the contact's email address. That is on purpose: a confirmation you can click through without reading is not a confirmation, and this one cannot be undone.
Section 10
Email the portal sends
What happens after you press send: who the message appears to come from, where a reply lands, why a long send sometimes pauses, and what the portal does when an address stops working.
Who the message comes from, and where replies go
Everything sends from one Americon address so it passes the receiving server's checks — but the reply goes to whoever is assigned to that project, not to the shared mailbox.
Every message leaves as Americon Construction, from a single company address. That is not a style choice: mail servers check that the sender matches the domain that authorised it, and a message claiming to be from a personal address while leaving through a different account is what lands in a spam folder.
Replies are handled separately, and where they go depends on whether the portal is reading the bid mailbox yet.
- Once the bid mailbox is being read, every invitation carries its own reply address naming that job and that firm, so a reply files itself against the record and the people on the job are emailed that it arrived. This is the arrangement the portal is built around.
- Before that, a Reply-To points at the project manager assigned to the project, or the coordinator if no manager is set. The contractor reaches a person; the portal has no record of it.
- If neither is set and the bid mailbox is not being read, no Reply-To is added at all and replies go to the company address. Assigning somebody on the project is what fixes that.
The hourly sending limit
The mail host allows a fixed number of messages an hour. The portal counts them and pauses before hitting the ceiling, rather than being cut off partway through a list.
The mail provider caps how many messages an account may send per hour. Going over it does not queue anything — the provider simply refuses, and the account cannot send at all until the hour has passed. That has happened here before, and it is the one email failure this portal has actually had.
So the portal keeps its own count and stops short of the ceiling on purpose. A notification to a long list is sent in batches, and if the remaining budget will not cover the next batch, the send pauses and resumes on its own once the hour has rolled forward.
- Nothing is lost when a send pauses. It picks up where it stopped.
- You do not need to keep the page open, or press anything again.
- Some of the budget is held back for one-off messages — a password reset, a single invite — so a large mailing cannot lock out the person trying to get an account working.
When an address stops working
An address the mail server rejects outright is set aside and not tried again. A temporary failure is only set aside after it repeats.
Contractors change jobs and companies fold, so addresses collected over a few years will contain some that no longer exist. Continuing to mail them is not merely useless — a sender who keeps mailing dead addresses is treated as less trustworthy by receiving servers, which starts to affect delivery to everybody else on the list.
The portal therefore watches what the receiving server says and reacts differently to the two kinds of failure:
| What came back | What it means | What the portal does |
|---|---|---|
| Rejected outright | No such mailbox. It is not coming back. | Set aside immediately. Not tried again. |
| Temporary failure | Mailbox full, server busy, greylisting. | Counted. Set aside only after it happens three times. |
| Sending limit reached | Nothing is wrong with the address. | Nothing. The send pauses instead — see the hourly limit. |
| Unsubscribed | The contractor asked to stop. | Set aside permanently. |
A single temporary failure clears itself the next time that address is reached successfully, so a contractor whose mailbox was full for a day does not slowly accumulate strikes across the year.
Bringing a set-aside address back
A bounced address cannot simply be re-ticked. Someone has to confirm the address is right — by phone, or from a reply — and that confirmation is recorded against their name.
An address the portal has set aside is shown as such and cannot be selected for a send. Clearing that is deliberately a step rather than a checkbox, because the reason it was set aside was a mail server stating the address does not exist — and disagreeing with that on a hunch just repeats the bounce.
- Confirm the address independently: a phone call, a reply from the contractor, or a corrected address on a recent bid.
- Open the contact and use the verification action.
- Say briefly how it was confirmed. That note is kept.
The address becomes selectable again, and the audit trail records who cleared it, when, and what they said. If it bounces again it is set aside again — the verification is a statement about one moment, not a permanent exemption.
Who has unsubscribed, and what happens to them
Unsubscribing takes effect immediately and marks the contact inactive. Nothing is deleted, and only the contractor themselves can undo it.
Every message the portal sends carries an unsubscribe link, and it works the moment somebody uses it — no waiting, no queue, nobody to ask.
Three things happen at once:
- The address stops being mailed, and stays stopped.
- The contact is marked inactive in the directory. They drop out of the default view and out of every selection, so nobody has to remember.
- The unsubscribe is recorded with its date, so the list can be read back later.
The self-check page reports how many unsubscribed in the last thirty days. Read that number as a comment on what was sent rather than on the addresses: a run of them in one month usually means one mailing reached people who were not expecting it.
Putting an unsubscribed contact back on the list
Only when the contractor has asked. You record how they asked, and that note is kept — it is the evidence the request came from them and not from us.
A contractor who unsubscribed and later rings up wanting invitations again can be put back on. This is the only thing that reverses an unsubscribe.
- Open the contact.
- Use Opt back in.
- Write how they asked: *"Phoned 12 Aug, Bob asked to be re-added."* This is required.
The address becomes mailable again and the contact goes back to active in the directory.
What was sent, and what happened to it
Every message the portal sends is recorded with its recipient, its project, and whether it was delivered, deferred or rejected.
Until now the portal could say a message had been handed to the mail server and nothing after that. The log records the outcome as well, per recipient, which is what makes "was this contractor actually told?" a question with an answer.
- Accepted by their mail server — taken by the far end for delivery.
- Their mail server delayed it — a temporary problem, or our hourly limit. It will be tried again.
- Bounced back — refused. That address is set aside.
- Sending failed — the message never left us.
- Held back before sending — the recipient had unsubscribed or was already set aside.
Those are the same words the Delivery history screen uses for one firm, and the same words in the downloaded solicitation record, because they are the same outcomes — see Proving an invitation was sent.
The log is kept per project as well as overall, so the record of who was invited to price a job stays attached to the job. On a public bid that record is also the documentation of a good-faith effort to solicit widely — which is worth considerably more when it was collected automatically at the time than when it is reconstructed afterwards.
The bounce log
What came back undelivered, and every address the portal has stopped writing to. Stop mailing an address here, or put one back when you know it is good again.
Invitations are sent from a real mailbox and things come back to it — addresses that no longer exist, out-of-office replies, notices from mail hosts. The portal reads that mailbox hourly and deals with most of it on its own. This screen is the part that needs a person, and it is in two halves.
Needs a look is the queue. Each row is something the portal would not act on unaided: a delivery report whose code does not prove the address is dead, an automatic reply, a notice from a host. Two buttons clear a row — Suppress stops the portal writing to that address, Dismiss takes the row off the list and changes nothing else.
Not being mailed is the list itself: every address the portal is currently holding back from, why, since when, and any note. An address here is skipped on every send, on every job.
Everything on this screen is open to any coordinator or project manager. You are the one who rang the firm and was read a new address, so you are the one who can judge whether it is good again — an approval step in front of that would only be somebody else agreeing with you a day later.
There are two ways back onto the list, because there are two ways off it, and they are not the same act. The screen offers whichever one applies to that row and never both.
| How it got on the list | How it comes off | What is asked of you |
|---|---|---|
| Bounced — a mail server refused it | Clear | A note if you have one. It is not required. |
| Unsubscribed — they asked to stop | Record consent & restore | A note saying how they asked. Required. |
A bounce is an observation about an address. Observations can be wrong — a server can refuse a perfectly good mailbox for a week — so clearing one needs nothing but your knowing better. An unsubscribe is a person's decision, and the only thing that reverses it is that person asking. The note is required there because the note *is* the consent record: it is what answers "why is this firm being mailed again after opting out?" eighteen months later, when nobody remembers the phone call.
Refresh reads the mailbox immediately instead of waiting for the hour. It will not run twice within a minute, and if another read is already going it says so rather than appearing to do nothing. The line beside it always says how long ago the mailbox was last checked.
Section 11
Questions, bids and what contractors send back
A contractor replies to an invitation and it appears on the job — the question, the bid, and the drawings that came with it. This is where that lands, who can open it, and what to do when something does not arrive.
How a reply reaches the job
Every invitation carries a reply address unique to that job and that firm, so a contractor pressing Reply lands on the right record without anybody sorting mail.
Contractors never sign in and never upload anything. They reply to the invitation from their own email, the way they would to any other message, and the portal does the filing.
That works because each invitation is sent with its own reply address — something like bid-1487-a3f9c1d2e0@bidding.americonconstructionco.com. The part after bid- names the job, and the code after it is a signature tying the address to that one firm. When a reply arrives, the portal already knows which record it belongs to.
Each invitation also carries a second address, on the same job and the same firm, behind the Send your bid button: offer-1487-a3f9c1d2e0@. That is the only difference between the two, and it is what lets the portal tell a bid from a question before anybody here has read either.
| What the contractor did | Where it lands |
|---|---|
| Pressed Reply, or wrote to us fresh | Waiting for somebody — the queue with the deadline on it. |
| Pressed Send your bid | Collecting with the other bids, sealed until the bid date. |
- The portal reads the bid mailbox every few minutes.
- It works out which job the message is about — from the reply address, from the invitation it is answering, or from the sender being invited to exactly one open job.
- The message appears under Correspondence on that job's invitation record.
- The project manager and coordinator are emailed that something arrived, with a link to it.
- Straight after, a second pass goes back for anything attached and puts it under Offers received.
The Correspondence panel
Everything that arrived about this job, newest first, with a button to say what each message was.
The panel lists what came in: who from, when, the subject, and the opening lines. It sits above the list of invited firms because it is the part with a deadline on it — an unanswered question stops being answerable when the job closes.
Click the subject to open the whole exchange with that firm about this job — their messages and everything typed back to them, in order, with what we wrote in full — and the rest of the correspondence with them on other jobs underneath it. A row here is one line of a conversation, and one line is how a question gets answered twice, or answered against something we never promised.
It is in two sections, and they have opposite handling rules. Waiting for somebody is mail nobody here has read and questions nobody has answered. Settled, and bids collecting is everything dealt with, plus the bids, which are meant to sit there sealed until the bid date.
A message marked Sent as a bid arrived at the address behind the Send your bid button in the invitation, so the contractor has said what it is. That sorts it into the collecting section — it does not mark a receipt, and the buttons are still there to be pressed.
Each message carries three buttons the first time you see it: Bid, Question and Neither. Pressing one records what it was.
- Bid also marks the bid receipt against that firm on the record below, so the two can never disagree.
- Question keeps it listed as waiting until it has been answered. Answering it with Reply marks it for you; Mark answered is for the times you rang them, or wrote from your own mail.
- Neither clears it out of the way — an out-of-office, a change of address, a note about something else.
The line under a message says how many attachments came with it. Until the second pass has been back for them it says not fetched yet, and while the count came from only the top of the message it says at least. Both stop hedging once the whole message has been read.
Under the table, mail that named no job is offered on every project's panel. This is about this job files it here; Not for us takes it off the queue for everybody, which is the answer for a hosting notice or a mailing list that would otherwise be read past on every job.
Waiting for an answer
Everything nobody has dealt with, across every open job, with the ones closing soonest at the top.
A job's own Correspondence panel tells you what is waiting on that job. It cannot tell you what is waiting on the job nobody opened today, and that is the one that costs a question. This screen is the same list run across every job that is open or closed within the last three weeks.
It is sorted by how much time is left, not by when anything arrived. A question that came in this morning on a job closing tomorrow sits above one from last week on a job closing in May.
Two kinds of row appear, and nothing else:
- Nobody has said what it is — mail that arrived without saying it was a bid, and nobody here has read it. Anything might be in it, including a bid somebody sent by pressing Reply, so it waits here rather than in the pile that is left sealed.
- Sent as a bid, nobody has checked it — it came in through the Send your bid button, so it is collecting as a bid, and no person has confirmed that. It appears here a day after it arrived, or straight away if the job is about to close.
Bids that arrived normally and that somebody has confirmed are not here. This is a list of what is owed; a screen that also listed every bid would be a screen with nothing to clear, and the four rows that mattered would go down with it.
The document count is shown on each row. A message nobody has read, carrying four documents, on a job closing this afternoon is what a bid sent by pressing Reply looks like from the outside — open that one first.
Click anywhere on a row to open that message on its job’s Who has been invited record, with the row you clicked marked. The job name and Open the job go to the same place, so ctrl-click or the middle button opens it in a new tab and you keep the list. Reply is the one link that goes somewhere else — straight to writing back to that firm.
Mail that did not name a job
A contractor writing fresh rather than replying gives the portal nothing to file on, so it waits on a screen for somebody to say which job it is about.
Most mail names its own job. Some does not: a firm writing from scratch, an estimator forwarding from an address nobody invited, somebody asking to be added to a bid list. The portal declines to guess, which is the right answer and a useless one on its own — so it goes on a screen instead.
Each waiting message shows a longer excerpt than the invitation record does, because the job here is to work out which project it is about, and that is often settled by a sentence in the third paragraph.
- Attach to a job files it on that job's Correspondence panel, and goes back for its attachments.
- Not for us removes it from this list only.
- Never queue refuses that sender from now on, so their next message never reaches the list at all.
Most of what piles up here needs the same one-word answer — a hosting notice, a mailing list, a night's worth of spam. Tick the boxes down the left and one Not for us clears the lot; shift-click ticks a whole run at once, and the bar at the bottom says how many are chosen before you press anything.
Use Never queue for the mail that keeps coming back — a hosting notice, a mailing list, a newsletter every Tuesday. Each of those arrives as a brand new message, so taking them off the list one at a time never catches the next one. The picker beside the button offers the sender's address or everyone at their domain; pick the domain for a list that writes from no-reply@ one week and news@ the next. Anything of theirs already waiting is cleared in the same press.
What is being refused is listed at the foot of the screen, with how many messages each rule has turned away and when it last did. Queue it again ends a rule — though mail that arrived while it was in force does not come back, because the portal has already read past it.
A message you have refused stays refused. The portal never deletes mail, so it goes on reading past that message in the mailbox for ever — it just stops offering it to you again.
The same waiting mail is offered on every job's Correspondence panel, with Sort all unplaced mail leading to the full list. That is deliberate: somebody reading one job's post is the person most likely to recognise a message about it, and a queue reachable from one screen only is a queue that gets emptied once. Both buttons are there too — This is about this job, and Not for us for the ones that are about no job at all.
Offers received
One row per firm that has bid, with a document count. Click the firm to read their whole offer.
The panel answers one question at a glance: who has bid, and how much came with them. The filenames are not here on purpose — forty firms with three documents each would make every row three lines tall and push the worklist off the bottom of the page. Click a firm to see them.
A firm appears here for one of two reasons: somebody pressed Bid on their message under Correspondence, or the contractor sent it through the Send your bid button in their invitation. The second kind is marked not checked yet, and counted separately above the table, because nobody here has looked at it and no receipt is recorded against the firm.
| What you see | What it means |
|---|---|
| A number beside a file icon | That many documents are stored and can be opened. |
| None | The whole message was read and nothing was attached. |
| still arriving | The portal knows there are attachments and has not been back for them yet. It goes straight after the message is read, so this usually clears within a minute or two. |
| too large to store | The message is bigger than the portal downloads in one go. It is still in the mailbox — open it there. |
| could not be read | Something went wrong taking the message apart. Still in the mailbox. |
| no longer in the mailbox | The message was deleted from the mailbox before the attachments were fetched. Nothing this portal does deletes mail, so somebody did it by hand. |
Rows needing attention are marked down the left edge, and a summary above the table counts them, so a job with one firm in trouble does not need reading cell by cell to find it.
Who can open a bid, and when
Before the bid date, only the project manager and coordinator assigned to the job can open a bid, and every open is logged.
A sealed price from a subcontractor is not something the rest of the office is entitled to read while the job is still bidding. The portal enforces that rather than trusting to habit.
| When | Who can open a bid document |
|---|---|
| Before the bid date | The assigned project manager and the assigned coordinator. Nobody else, however much else they can do on the job. Every open is written to the audit log with a name on it. |
| After the bid date | Anybody who can edit the job — the same people who see the tabulation. Not logged individually. |
Colleagues who are sealed out still see that a firm answered and how many documents arrived. They cannot open them, and the offer screen shows them nothing at all rather than a refusal — a refusal would confirm which firm bid which job, which is the fact being withheld.
The documents a contractor sends
Drawings, schedules and anything else attached to a bid, stored against the job and downloadable from the message they came with.
Documents are listed under the message they arrived with, so a covering note and the drawings it refers to stay together. Each shows its type, its name as the contractor saved it, and its size.
They are stored outside the public part of the site and served only through a link that checks who is asking. A link copied out of the address bar and sent to somebody else does not work for them.
- PDFs and images open in the browser. Everything else downloads.
- Signature logos and other images that are part of how a message looks are not stored as documents — otherwise a plan set of four drawings would show as seven files.
- If a message carried more than the portal stored, it says so, and the whole message is still in the mailbox.
What "contained, never scanned" means
Nothing a contractor sends is scanned for malware. It is contained so this site cannot run it — which is not the same as safe.
There is no virus scanner here, and there is not going to be one. The free scanning services keep and share what is submitted to them, and a competitor's sealed bid is not ours to hand over.
So the portal makes a smaller claim, and it is one it can keep. Contained means:
- The directory the files live in refuses direct web requests, three different ways over.
- Nothing is ever written to disk under a name a web server would execute, whatever the contractor called the file.
- Everything is handed to you as a download, except PDFs and images whose contents agree with their name.
- The contents are inspected, and anything that disagrees with the filename is flagged next to the download rather than in a footnote.
How long bids are kept
Bid documents are deleted three years after the bid date. The record that they arrived is kept.
Three years after a job's bid date, the documents sent for it are deleted from the server. The counted-off date is the bid date, not when the file arrived, so a late question answered a fortnight afterwards belongs to the same bid as the pricing.
What survives is the record: that Dutchman Mechanical sent four documents on 14 August 2026, and what they were called. That is worth keeping for as long as the job is. The files themselves are not.
- A job with no bid date is never swept — there is nothing to count three years from, and deleting on a guess cannot be undone.
- Deleting a project deletes its bidders' documents with it, immediately.
Is bid mail arriving?
Answers one question: whether the mailbox contractors reply into is being read at all. Not for reading your mail — that is on the job record and the worklist.
Your correspondence is on the job's Correspondence panel and on Waiting for an answer, and the schedule keeps both current. There is nothing to press to see it, and you should never have to.
This screen is for the different question, the one those screens cannot answer: *is mail arriving at all, or has the mailbox been silent since eleven?* On a bid afternoon that is worth being able to check without asking anybody.
| Row | What to read it for |
|---|---|
| Last checked | Minutes is normal. Hours means either nobody has touched the site or the schedule has stopped. |
| Next scheduled | Is due now is not a fault — the page load printing it is about to run it. |
| Read last run | Nought here plus a recent Last checked is a quiet mailbox, not a broken one. |
| Filed against a job | How many of those the portal could place on a record by itself. |
| Waiting to be placed | Mail that named no job. It is not lost — the link goes to it. |
| Last error | Only appears when there was one, and prints the mail server's own words. |
Check now reads the mailbox immediately. It will not run twice within a minute, and if a read is already going it says so instead of appearing to do nothing.
The stage-by-stage buttons for taking the pipeline apart are not here. They are a diagnosis rather than a piece of work, and they stay on the administrator's page — see Americon Bid Mailbox.
Section 12
For bidding contractors
You do not need an account, a password, or anything installed. Everything below works from the link in your invitation email.
Opening your invitation
The link in your invitation is the only address that opens a private project. If you lose it, you can have it sent again from the portal.
Use the View project and plan documents button in the invitation email. It opens the project page directly; there is nothing to sign into.
Deleted the email, or the link no longer opens? The page you land on offers Send my invitation again. Enter the address the invitation was sent to and it goes back to that address within a few minutes. Check the spam folder before asking a second time.
Invite links stop working 30 days after the bid deadline. Past that, nothing can be resent — contact the coordinator named in your invitation.
Telling us you are not bidding
Passing on one job is not the same as unsubscribing. Use “Not this one” and you stay on the list for future work.
Every invitation carries a Will you be bidding? panel, just under the button that opens the plan documents. It holds two answers: Yes, we are bidding and Not this one. Either takes one tap, there is nothing to fill in and nothing to sign into, and either can be changed later by tapping again.
Saying you are not bidding tells the project manager to stop chasing you on this job. It does nothing else:
- You stay on the invitation list and will hear about the next job.
- You are not unsubscribed from anything.
- You can change your mind — open the invitation again and tap the other answer.
Saying you are bidding means the project manager knows to expect a number from you, and that you are told first if the drawings or the deadline move.
The project page
Everything about the bid on one page: deadline with its time zone, location, schedule, who to contact, and the plan documents.
The page carries, in order:
- Bid due — the deadline, with its time zone spelled out. Read that abbreviation: a 2:00 PM Chicago deadline is 1:00 PM in Denver.
- Location — city and state.
- Estimated start and completion — when shown, the expected construction window.
- Scope of work — when shown, what is actually being bid, in Americon's own words. Not every project carries one; where it does, it is the fastest way to tell whether the job is yours before opening a set of drawings.
- Contacts — the Americon project manager and coordinator by name, and one Email the project team button. Their own addresses are not printed: the button is the route that reaches both of them and lands on the job.
- Plan files — the drawings and bid documents, with revision labels where they carry them.
Being asked who you are
Name, company and email, asked once. It is how we reach you if the drawings are revised or the bid date moves. You can skip it.
Before the plan files, you are asked for your name, your company and an email address. It is asked once per project and takes a few seconds.
It exists for one reason: if the drawings are revised or the bid date moves, this is how we reach you. Without it there is no way to tell you, and the ordinary result is a bid priced off a superseded sheet.
The address is used for notifications about this project and nothing else. Every message carries an unsubscribe link.
Downloading the plans
Click any file to download it, or use Download all for the whole set as one ZIP.
Each file shows its name, type and size. Click one to download it.
Download all packages the entire set into a single ZIP. A large drawing set takes a minute to compress — leave the tab open while it works.
Where a file carries a revision label — "Rev B", "Addendum 2" — check it against what you already have. That label is the only thing that distinguishes a reissued sheet from the one you downloaded last week.
Add to my calendar
Puts this one bid deadline into Outlook, Apple Calendar or Google Calendar. No account needed.
Downloads a standard calendar entry for this bid's deadline, which your calendar application will offer to add.
The entry is stored as a fixed point in time, so it shows correctly in your own time zone rather than in ours.
Asking a question
Reply to your invitation email, or use Email the project team on the project page. Either reaches the people running the job and is recorded against it.
Reply to the invitation email you were sent. There is no address to copy down, no form and no login, and attachments come through as normal.
If you no longer have the invitation, the project page carries Email the project team under the two names. It opens your own email with the address already filled in and goes to the same place.
Either way the message is filed against that project and the firm it came from, so it reaches the project manager and the coordinator without depending on one person being at their desk. That is why neither of their own addresses is printed anywhere: a message sent to one of them directly is one nobody else on the job can see.
There is no message form on the site and no account to sign into — everything goes through ordinary email.
Sending your bid
Press it, attach your proposal, send. It opens your own email — there is nothing to log into and nothing to upload.
Send your bid in the invitation opens a new message in your own email program, addressed for you. Attach your proposal and anything that goes with it, and send it the way you would send anything else.
It arrives against the right job and the right firm on its own, and stays sealed until the bid date — only the project manager and coordinator running that job can open it before then.
That address belongs to this job and your firm, and it does not expire. Keep it, write it down, or forward the invitation to whoever is pricing the work — it still files correctly weeks later, from any of your addresses.
Sent your bid by replying instead? Nothing is lost and nothing needs re-sending. It reaches the same job; somebody here just opens it to see what it was.
Section 13
User management
The only route to portal accounts. This site blocks the WordPress Users screen, so everything to do with accounts happens here.
The account list
Every portal account with its role, last sign-in and status. Search by name or email, or filter by role or status.
Shows name, email, role, last sign-in and whether the account is active or suspended, with an Edit link on each row.
Search matches names and email addresses. The role and status dropdowns narrow further, and Clear filters resets everything.
Choosing a role
Project Manager and Project Coordinator currently hold identical permissions. Pick the one that describes the job, not the access.
Both staff roles can create, edit and delete projects, see private projects, manage plan files, send invites and export lists. The role records what someone is responsible for; it does not currently restrict what the software allows.
Administrator adds account management and access to the WordPress admin. Keep the number of administrators small — and never let it reach zero, since only an administrator can create another one.
Adding an account
Name, email, username and role. Leave "Email a set-password link" ticked so the person chooses their own password.
All five fields are required. Two are worth care:
- Email — used for sign-in, password resets and every message the portal sends them. It has to be one they actually read.
- Username — first initial plus last name, e.g.
jsmith. It cannot be changed afterwards.
Leave Email a set-password link ticked. The account is created with no password and cannot be signed into until somebody sets one, so the email is the way in. Untick it only when creating an account ahead of time — and remember that somebody then has to trigger that email later.
Suspend, or delete?
Suspend when somebody leaves — sign-in stops, everything they did stays on the record. Delete only removes an account created by mistake.
Almost always suspend.
| Suspend | Delete | |
|---|---|---|
| Can they sign in? | No — refused with a clear message | No, the account is gone |
| Their audit history | Kept, still attributed to them | Rows become an anonymous user number |
| Projects they created | Untouched | Must be reassigned |
| Reversible? | Yes — Restore access | No |
| Use it when | Someone leaves, or access must stop now | The account was created in error |
A suspended account shows a Suspended badge in the list and on its own page, along with who suspended it and why. Restore access puts it back with its original role.
Last sign-in
When this account was last used. Hover for the exact date and time.
Shown as a relative time — "3 days ago" — with the exact timestamp available on hover.
An account that has never been used reads as such, which usually means the set-password email was never acted on.
Section 14
Administrator tools
Under Tools in the WordPress admin, for administrators only. You should not need these in normal use — they are for setting the site up and for answering questions after the fact.
Americon Site Setup
Checks that every page the portal needs exists at the right address, and creates any that are missing.
The plugins provide the features; they do not provide the pages. This tool lists every page the portal needs, what each one holds, and whether it is correct — then creates or repairs the missing ones in a single press.
Run it on a fresh install, after moving hosts, or whenever a header button leads to a "not found" page.
Afterwards: open Settings → Permalinks and press Save once, then run the self-check.
Americon Self Check
Verifies plan-file protection, scheduled jobs and role integrity, and says plainly what is wrong rather than that something is.
Confirms the things that fail silently: that plan files are genuinely unreachable without an access check, that the reminder and notification schedules are registered, and that roles and capabilities are intact.
Run it after any deployment or plugin change. It is designed to name the cause, not merely report a failure.
Being told when the site breaks
The self-check runs nightly and mails administrators when it stops passing, plus a weekly all-clear. Silence on a Monday means something is wrong with the mail, not that everything is fine.
The checks described above were, for a long time, run only when somebody happened to open the page. So the portal could detect a dead schedule, a broken mail login, or plan files that had stopped being protected — and would sit on that discovery until an administrator went looking. The way anyone found out was a contractor ringing up.
Two things close that gap, and they are deliberately independent of each other.
- The nightly digest. The self-check runs on a schedule. Administrators are mailed when it starts failing, when what is failing changes, and once a week regardless — so a working alarm proves itself weekly rather than only at the moment you need it.
- The heartbeat. A scheduled task outside the site calls a URL on it. This exists because the digest runs on the site's own scheduler, and a scheduler that has died cannot report its own death — every scheduled job stops, no invitation leaves the queue, no reminder goes out, and the only symptom is silence.
Americon Bid Mailbox
Where an administrator proves the bid mailbox can be read, and watches a message land rather than waiting on a tick. Reading it once is also what releases held invitations.
The mailbox contractors reply into reads itself every few minutes, and a message that arrives with drawings on it has them fetched and the job team told within seconds of being read. None of that needs anybody on this page. It is here for two moments: proving the mailbox can be read at all, and standing over it when something has not turned up.
The table is one question in seven parts, read top to bottom — is it configured, when did it last run, when does each stage run next, what did that run do, how were the messages matched to jobs, what is still waiting, and how much room the stored documents have left.
| Row | What to read it for |
|---|---|
| Last read | How far behind the mailbox is. Minutes is the normal state; hours means either nobody has touched the site or the schedule has stopped. |
| Next, on its own | When each of the three stages runs unaided. Is due now is not a fault — the page load printing it is about to run it. |
| That run | What the last read did, counting separately what was filed, what could not be placed, and what had been read before. A run that saw nothing new and a run that could not see the mailbox therefore do not look alike. |
| How they were matched | By the reply thread, by the project address, or by the sender alone. The last is the weakest of the three, and is only used when the sender is invited to exactly one open job. |
| Waiting, in total | Messages that named no job. They are not lost — see Mail that did not name a job. |
| Notices owed | Jobs holding correspondence nobody has been emailed about yet. Normally nought. |
| Documents stored | What the stored bid documents use, against what this portal allows itself and what is left on the server. |
Three buttons run the stages by hand: Read the mailbox now, Fetch waiting documents now, and Send any notices owed. The first is the one to reach for — a read that files anything asks the other two to run immediately after, so one press usually does all three.
A read that fails prints the mail server's own words rather than a summary of them. "Could not read the mailbox" is equally true of a wrong password, a wrong host, a firewall and an expired certificate, and only the server can say which of those it was.
wp-config.php on the server — not in the copy in the repository, which is never deployed.The mailbox invitations come back to
Invitations are sent from a real mailbox, and things come back to it. The portal reads it hourly, sets aside the addresses proven dead, and raises anything a person wrote for somebody to answer.
Four kinds of thing arrive at the address invitations are sent from: reports that a message could not be delivered, out-of-office replies, notices from the mail host, and replies from contractors who pressed Reply instead of using the links in the email. The last of those is a person asking a question about a live bid.
The portal opens that mailbox every hour and reads fifty messages at a time, so a mailbox that has been filling for a year is worked through steadily instead of in one run.
| What arrived | What the portal does with it |
|---|---|
| A delivery report naming a mailbox that does not exist | Sets the address aside on its own, and removes the message. |
| A delivery report meaning anything else | Counts it as a temporary failure or raises it for a look. Never sets an address aside on a guess. |
| An out-of-office reply, or a notice from the host | Raises it for a look, and removes the message. |
| Anything written by a person | Raises it for a look and leaves it in the mailbox, so the whole message can still be read and answered. |
Nothing is deleted that was not understood. A message the portal cannot identify is assumed to be somebody writing to us, and tidying those away as it passed would mean pointing an automated process at a mailbox holding months of correspondence and destroying it on the first run.
The queue itself -- what is waiting, and the buttons to clear it -- is on the dashboard under Bounce log, where coordinators can reach it. This page is the mailbox behind it: whether it can be signed into, when it was last read, and what that read did.
It lists the same rows, each saying which of these it is — Somebody wrote to us, Automatic reply, Failed, but not proof the address is dead, and so on. Read the mailbox now checks immediately rather than waiting for the hour. Dismiss clears a row once it has been dealt with, and Stop mailing it sets the address aside where a reply makes clear it should be.
wp-config.php. Without it the feature is inert — it does nothing at all, and the self-check page reports that rather than leaving it looking healthy.How plan files are protected
Plan files are stored outside the public folder and served only after the project's visibility and access code have been checked.
Plan files are not ordinary media. They are stored outside the publicly readable uploads folder, and every request for one is checked against the project's visibility and access code before a single byte is sent.
That matters because gating the *page* is not enough on its own — a file at a public address can be fetched directly by anyone who has, or guesses, its URL, and no amount of page-level permission checking ever runs.
Section 15
Reference
Shortcuts, the exact meaning of the words the site uses about deadlines and visibility, and a glossary.
Keyboard shortcuts
Press ? to see the shortcuts available on the page you are on. "g" then a letter goes somewhere; "/" jumps to the search box.
Deliberately few, and following the conventions already used by Gmail, GitHub and Linear.
- gd
- Go to the calendar dashboard
- gp
- Go to public projects
- gv
- Go to private projects (staff)
- c
- Create a project (staff)
- /
- Jump to the search box
- ?
- Show the shortcut list
For a chord, press g, release it, then press the second letter within about a second.
? only offers what actually works on the page you are on — the calendar view has no search box, so / is not listed there. Shortcuts never fire while you are typing in a field.How deadlines are described
Deadlines always carry their time zone, and "closing soon" means inside 72 hours everywhere on the site.
- Closing soon means within 72 hours of the deadline. The calendar's amber markers, the quick filter and the reminder emails all use that same number.
- Closing today means before midnight tonight, in the site's own time zone.
- Closing this week means within the next seven days.
- Time zone is always printed beside a deadline. A bid deadline is contractual, and "2:00 PM" means different things in Chicago and Denver.
Calendar entries you download or subscribe to are published as fixed points in time, so your own calendar converts them to your clock correctly.
Public and private, exactly
Public projects are on the calendar, in the public list and in the subscribable feed. Private projects are on none of them and need the access code.
| Surface | Public project | Private project |
|---|---|---|
| Bid calendar | Visible to everyone | Visible to staff only |
| Public Projects list | Listed | Never listed |
| Private Projects list | Not listed | Staff only |
| Subscribable calendar feed | Included | Never included |
| Details page | Open to anyone | Access code required |
| Plan file downloads | Open to anyone | Access code required |
| CSV export | Staff only | Staff only |
A project created before visibility existed and never edited counts as public. A project whose status is anything other than Open is kept off the public feed until somebody decides it belongs there.
Glossary
The words this site uses for things, and what each one means here specifically.
| Term | Means |
|---|---|
| Access code | The long code carried in a private project's invite link. Anyone holding it can open the project and download its plans. |
| Bid due | The deadline for submitting a bid. Drives the calendar, the sort order, the reminders and link expiry. |
| Closing soon | Within 72 hours of the bid deadline. |
| Invite link | The address to send contractors. For a private project it carries the access code. |
| Plan files | Drawings and bid documents attached to a project. Access-checked, unlike the project photo. |
| Plan holder | A contractor who identified themselves before downloading the plans, and who can therefore be told when something changes. |
| Private | Off every public surface. Reachable only through the invite link. |
| Public | On the bid calendar, in the public list and in the subscribable feed. |
| Revision label | Free text on a plan file matching the drawing's own title block — "Rev B", "Addendum 2". |
| Staff | Administrator, Project Manager or Project Coordinator. |
| Suspended | An account that cannot sign in, but whose history and projects are intact. |
| Trade | A work package wanted on a project — electrical, mechanical, sitework. Contractors filter by these. |
Nothing in the manual matches that.