To work with the facts you added to the Replicator, you need to define a model.
The first kind of fact you added was a Blog.Site, which had a domain field.
Let's start there.
Create a folder called model in the src directory.
Inside the model folder, create a file called blog.ts.
Add the following code:
export class Site {
    static Type = "Blog.Site" as const;
    public type = Site.Type;
    constructor(
        public domain: string
    ) { }
}The next fact you added was a Blog.Post, which had a createdAt field.
It was related to a site.
Let's add that to the blog.ts file.
export class Post {
  static Type = "Blog.Post" as const;
  public type = Post.Type;
  constructor(
    public createdAt: Date | string,
    public site: Site
  ) { }
}Finally, you added a Blog.Post.Title for the post.
Let's add that to the blog.ts file.
export class PostTitle {
  static Type = "Blog.Post.Title" as const;
  public type = PostTitle.Type;
  constructor(
    public post: Post,
    public value: string,
    public prior: PostTitle[]
  ) { }
}Now we need to tell Jinaga about these types.
At the bottom of the blog.ts file, add the following code.
You will import ModelBuilder from jinaga.
export const blogModel = (b: ModelBuilder) => b
  .type(Site)
  .type(Post, m => m
    .predecessor("site", Site)
  )
  .type(PostTitle, m => m
    .predecessor("post", Post)
    .predecessor("prior", PostTitle)
  )
;We'll eventually build our model from multiple files. Right now, though, we only have the one. We'll still make space to compose more.
Create a file called index.ts in the model folder.
Add the blog model to the composite model:
import { buildModel } from "jinaga";
import { blogModel } from "./blog";
export const model = buildModel(b => b
  .with(blogModel)
);