Shared author byline card for article-shaped detail pages (blog posts, product releases, onboarding guides, investor updates). Designed for embed-readiness across multiple host apps without requiring Next.js or a `ChatRuntime` provider.
## Key Components
### `ArticleAuthorBylineProps`
| Prop | Type | Description |
|------|------|-------------|
| `author` | `string \| null` | Required display name; returns `null` when empty |
| `avatar` | `string \| null` | Avatar URL; falls back to a `User` icon placeholder |
| `bio` | `string \| null` | Bio paragraph rendered below the name |
| `jobTitle` | `string \| null` | Job title rendered under the author name |
| `publishedAt` | `string \| Date \| null` | ISO string or Date; formatted as "Month D, YYYY" (UTC-stable) |
| `href` | `string \| null` | Optional link wrapping the author name |
| `fallbackBio` | `string \| null` | Italic fallback text when `bio` is absent; hosts inject platform-specific copy |
| `size` | `'md' \| 'lg'` | Avatar size — `md` = 56px (default), `lg` = 64px |
| `proxyImageUrl` | `(url: string) => string` | Host-injected image URL mapper; takes precedence over ambient runtime proxy |
### `ArticleAuthorByline`
Main exported component. Renders an avatar, name, optional date/job title, and bio. Avatar URLs are proxied through the optional ambient `ChatRuntime` (`imageProxyUrlPrefix`) or a host-injected `proxyImageUrl` — falls back to the raw URL when neither is available.
### `formatDate` (internal)
Formats a `string | Date` to `"Month D, YYYY"` using `timeZone: 'UTC'` to prevent SSR/client hydration mismatches (React error #418) near midnight boundaries.
## Usage Example
```typescript
import { ArticleAuthorByline } from 'openframe-oss-lib/components/article-author-byline'
// Basic usage
// With host-injected fallback bio (e.g. from hub app-config)
`https://img-proxy.example.com/?url=${url}`}
/>
// Returns null — no card rendered
```
**Source:** [`article-author-byline.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/article-author-byline.tsx)