← Astro Now
Opening your Access Pass…

This Pass needs a moment.

{{ passPreviewError }}

Explore Astro Now

Your Access Pass

{{ publicPass.code }}

{{ passIssuerInitial }}

Shared by

{{ publicPass.issuer?.name }}

{{ publicPass.issuer.handle }}

{{ publicPass.issuerRole === 'partner' ? 'Partner' : 'Personal' }}
1 · Verify2 · Make it yours3 · Begin

Start with your email

We’ll send one quick code to keep your Pass connected to you.

Check your inbox

Enter the six-digit code sent to {{ passRedeemEmail }}.

A name and photo

For your Astro Now profile.

Pass ready

Let’s build your first clock.

Add your birth details to begin.

{{ passRedeemMessage }}

Astro Now · Community

People making time their own.

A small, opt-in constellation of people who have chosen to share a chart. Sun placements are the first of many public chart details to come.

{{ directoryPeople.length }}

public {{ directoryPeople.length === 1 ? 'person' : 'people' }}

Finding the public constellation…

The directory is taking a moment.

{{ directoryError }}

{{ directoryPeople.length ? 'No people match that search yet.' : 'The first stars are just arriving.' }}

{{ directoryPeople.length ? 'Try a name, handle, or another Sun sign.' : 'Public profiles appear here when people choose to share their chart.' }}

{{ publicPerson.name.slice(0, 1) }}

{{ publicPerson.name }}

{{ publicPerson.handle || 'Astro Now member' }}

Star code · {{ referralShortId(publicPerson) }}

☉ Sun placement

{{ publicPerson.summary.sun.sign }} · {{ publicPerson.summary.sun.house }}{{ ordinal(publicPerson.summary.sun.house) }} House

Chart detail arriving soon

Born in {{ directoryBirthRegion(publicPerson) }}

A quick reset

Astro Now did not finish opening.

Your saved data is still on this device. Please reload once to reconnect your local space.

If this keeps happening, Safari’s website data for Astro Now may need to be cleared before restoring your cloud space.

Astro Now

{{ person }}’s House-o-Clock

Your personal 24-hour rhythm through the twelve houses.

Current house

House {{ currentHouse }}

☀️ {{ skyClock.sun.sign }} 🌙 {{ skyClock.moon.sign }}
Learn about Astro Now

Meet the rhythm behind your House-o-Clock.

See how your chart becomes a living 24-hour map, and discover the ideas that make Astro Now different.

See the overview

Welcome back

Restore your Astro Now

Enter the email connected to your cloud backup. We’ll send a quick code, then restore your people and profile on this device.

{{ cloudRestoreMessage }}

{{ formMode === 'edit' ? 'Person settings' : 'New chart' }}

{{ formMode === 'edit' ? `Edit ${person}` : 'Add a person' }}

Birthplace establishes the natal timezone. Add any places this person lives to view their clock locally.

Add a shared public chart

Search a public name or handle. Their shared birth-chart inputs become a local copy in your library—never a record you manage for them.

Searching public profiles…

{{ formError }}

Your first clock is ready

Keep it safe, if you’d like.

Your chart is saved on this device now. A one-time $10 gift can also create a verified cloud backup, so you can recover it if browser data is cleared or you move to another device.

☁ Cloud backup

Private, email-verified storage and future sharing tools. You can explore your clock locally first—there’s no pressure.

Giving Supporter

Thank you for being here.

Your support is helping make Astro Now durable and independent.

Your lifetime support

${{ profileTotalGiving.toLocaleString() }} given

×{{ block.multiplier.toLocaleString() }}

{{ denomination.label }}

Next intended gift: {{ profileNextIntendedGiftLabel }}

Thank you for helping build Astro Now.

Keep Astro Now alive

{{ hasProfileGiven ? 'Thank you, Giving Supporter.' : 'Thank you for being here.' }}

A gift helps turn this human project into something durable. It opens cloud backup and social publishing when those services launch.

Your gift ($10 minimum)

$

Human effort supported

{{ effortLabel }}

×{{ block.multiplier.toLocaleString() }}

{{ denomination.label }}

{{ givingEncouragement(normalizedGiftAmount) }}

✓ Verified profile email

{{ mainProfile.email }} is your shared support identity. Manage it in Profile.

{{ mainProfile.referrer.slice(0, 1) }}

Discovered from

{{ mainProfile.referrer }} {{ mainProfile.referrerProfile.handle }}

Your Giving Supporter profile

After your $10 Bitcoin gift confirms, this name and photo anchor your private cloud space and your 10 Access Passes to share.

Add a photo by selecting the profile circle.

Bitcoin gift

Give ${{ normalizedGiftAmount }} {{ gift.frequency }}

Scan to fill the quoted Bitcoin amount, or switch to a bare address.

{{ activeGift?.expectedSats?.toLocaleString() }} sats · {{ quotedBitcoinAmount }} BTC

Quoted at ${{ Math.round(activeGift.quotePriceUsd).toLocaleString() }} / BTC

{{ bitcoinAddress }}

New to Bitcoin? Muun, Cash App, or Venmo can help you get started.

Thank you

{{ giftHasArrived ? 'Gift Arrived! ✨' : 'We’re checking for your gift.' }}

{{ giftHasArrived ? 'We found a matching Bitcoin transaction. Thank you for helping Astro Now grow.' : giftWatchElapsedSeconds < 60 ? 'Looking for your wallet broadcast now. This usually appears quickly, but can take a minute.' : 'No gift has arrived yet. You can safely close this and return when your wallet has finished sending.' }}

{{ giftHasArrived ? (activeGift?.confidence?.label || 'Gift Arrived') : 'Checking your gift' }}

{{ giftWatchElapsedLabel }}

${{ giftHistoricalUsd(activeGift).toLocaleString() }} received · {{ confirmationLabel(activeGift.transaction.confirmations) }}

{{ giftWatchStatus }}

Your local profile

Profile

This is the one identity connected to your support and future cloud features.

Profile photo{{ profileDraftInitials }}

Email

Verified

Your one email identity for support and future cloud features.

{{ emailVerificationMessage }}

Discovered from (optional)

{{ mainProfile.referrer.slice(0, 1) }}

{{ mainProfile.referrer }} {{ mainProfile.referrerProfile.handle }}

{{ hasProfileGiven ? 'Giving Supporter' : 'Your giving' }}

${{ profileTotalGiving.toLocaleString() }} given

{{ profileEffortLabel }}

×{{ block.multiplier.toLocaleString() }}

{{ denomination.label }}

Your confirmed gifts will appear here.

Gifts given

{{ profileGivingCount }} {{ profileGivingCount === 1 ? 'time' : 'times' }}

Giving plan

{{ activeGivingPlanLabel }}

No active plan

Your next intended gift is {{ profileNextIntendedGiftLabel || 'scheduled' }}.

Lifetime cloud backups

Unlocked for Giving Supporters at launch, along with future Social Sharing Features.

{{ cloudBackupMessage }}

{{ legacyPlayGiftCount }} legacy play gift{{ legacyPlayGiftCount === 1 ? '' : 's' }} remain only on this device. They do not affect confirmed totals.

Astro Now · Access Passes

Invite someone into their rhythm.

A Pass is a personal free invitation to begin with Astro Now.

Connect your Pass account

Verify your email in Profile to view your access and any passes connected to you.

Preparing your Pass space

Loading your access, invitations, and sharing history together.

{{ passRoleTitle }}

{{ passRoleDescription }}

{{ passRoleBadge }}

{{ isPartnerPassRole ? '∞' : passInventory.available }}

{{ isPartnerPassRole ? 'Passes available' : 'Passes ready' }}

{{ passInventory.granted }}

{{ isPartnerPassRole ? 'Founding test passes' : 'Passes granted' }}

Your Pass access is ready. Share your link whenever it feels right.

{{ passAccessMessage }}

Your Pass identity

This is how your invitation appears when someone opens your link.

{{ isPartnerPassRole ? 'Partner issuer' : 'Supporter issuer' }}

Preparing your Pass identity…

{{ passIssuerMessage }}

Pass activity

{{ passRedemptions.length }} joined
{{ redemption.recipient?.name?.slice(0, 1) || '✦' }}

{{ redemption.recipient?.name || 'A new member' }}

Joined {{ formatAccessDate(redemption.redeemedAt) }} · {{ redemption.code }}

Your invitations will gather here.

When someone uses a Pass, you’ll see who joined and when they began.

Your rhythm here

Private, lightweight usage totals for this browser.

Local first

{{ usageAllTime.activeDays }}

Days

{{ usageAllTime.sessions }}

Sessions

{{ formatUsageMinutes(usageAllTime.activeMinutes) }}

Active time

This month: {{ usageThisMonth.activeDays }} active day{{ usageThisMonth.activeDays === 1 ? '' : 's' }} · {{ formatUsageMinutes(usageThisMonth.activeMinutes) }}.

Cloud access

A verified email adds this browser to your private cloud account.

Connected

This device is local only

Verify your email in the Profile tab whenever you want to reconnect cloud access.

{{ accessMessage }}

Private alpha view

Giving Dashboard

A clear ledger for gifts in and future Shared Gift Disbursements.

Confirmed gifts

{{ dashboardConfirmedGifts.length }}

Gift history

${{ dashboardConfirmedUsd.toLocaleString() }}

fixed at gift time

Bitcoin received

{{ dashboardConfirmedSats.toLocaleString() }}

sats across confirmed gifts

Giver & timeGiftStatusMatchBitcoin receivedControls

{{ gift.ownerName || 'Unnamed giver' }}

{{ gift.ownerEmail || 'No email stored' }}

{{ formatGiftDate(gift.createdAt) }}

${{ gift.intendedUsd }} {{ gift.frequency }}

{{ gift.expectedSats?.toLocaleString() || '—' }} sats quoted · {{ gift.id.slice(0, 8) }}

{{ gift.archivedAt ? 'Archived' : giftStatusLabel(gift.status) }}

Claimed {{ formatGiftDate(gift.sentAt) }}

{{ gift.confidence?.label || 'Waiting for a browser-observed match' }}

{{ gift.confidence.total }}% match confidence

No Gift Arrived yet

No gifts match these filters.

Pending to share

${{ dashboardPendingShareUsd.toLocaleString() }}

{{ dashboardPendingShareBtc.toFixed(8) }} BTC

Share credits

{{ givingDashboardCredits.length }}

ready for future manual disbursement

RecipientGiftShare at gift timePending BitcoinCreated

{{ credit.recipientName }}

{{ credit.recipientHandle ? '@' + credit.recipientHandle : credit.shareId }}

${{ credit.giftIntendedUsd.toLocaleString() }} gift${{ Number(credit.referrerUsdAtGift || 0).toLocaleString() }}

{{ (Number(credit.referrerSats || 0) / 100000000).toFixed(8) }} BTC

{{ Number(credit.referrerSats || 0).toLocaleString() }} sats

{{ formatGiftDate(credit.createdAt) }}
No referral share credits yet.

Private alpha studio

Invite contacts

A thoughtful, private place to prepare the people Astro Now may invite. No email is sent from this view yet.

People prepared

{{ outreachContacts.length }}

Ready to invite

{{ outreachReadyCount }}

Contact routes

{{ outreachContactableCount }}

direct or representative email

{{ outreachError }}

Opening the private contact studio…

Your invite constellation starts here.

Paste a prepared JSON record or add someone by hand. Nothing is sent until the later outreach phase.

{{ contact.displayName.slice(0, 1) }}

{{ contact.displayName }}

{{ contact.outreach?.status || 'research' }}

{{ contact.fullName }}

{{ contact.roles?.join(' · ') || 'Invite contact' }}

{{ zodiacLabel(contact) }}{{ contact.birth?.place || 'Birthplace pending' }}
{{ social.label }} {{ social.followers }}Social details coming soon

{{ preferredOutreachEmail(contact) || contact.outreach?.agentEmail || 'No email yet' }}

Open →
{{ (outreachDraft.displayName || '?').slice(0, 1) }}

Invite contact · {{ outreachEditingSection === 'all' ? 'full record' : outreachEditingSection }}

{{ outreachDraft.displayName || 'New contact' }}

Images are reduced to a 384px local copy before R2 saves them.

Identity

Contact & approach

Representation & projects

Research notes

Birth & location

Social snapshot

{{ network.label }}

Media & financial context

{{ outreachEditorError }}

{{ outreachDraft.displayName.slice(0, 1) }}

Invite contact

{{ outreachDraft.displayName }}

A quick, readable record. Open any module to update it.

{{ (opportunityContact?.displayName || 'A').slice(0, 1) }}

Astro Now · shared opportunity

{{ opportunityContact?.displayName || 'Your' }} opportunity model

A transparent estimate based on observed social reach and adjustable assumptions.

Potential shared value

{{ formatOpportunityUsd(opportunityValues(opportunityContact, opportunityDraft).lifetimeShareUsd) }}

One-time plus the selected recurring-year model.

Possible giving support

{{ formatOpportunityUsd(opportunityValues(opportunityContact, opportunityDraft).totalGiftUsd) }}

{{ formatOpportunityPeople(opportunityValues(opportunityContact, opportunityDraft).givingPeople) }} potential giving supporters.

Observed reach

{{ formatOutreachFollowers(outreachFollowerTotal(opportunityContact)) }}

Across {{ outreachSocialPreview(opportunityContact, 8).length || 0 }} recorded social channels.

Adjust assumptions

These are discussion inputs, not a forecast or guarantee.

{{ opportunityMessage }}

Fast local ingestion · schema v1

Paste an invite contact

Paste one JSON or JSON5 object. Comments, unquoted keys, and trailing commas are welcome; it opens for review before saving to R2.

{{ outreachImportError }}