-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser_training_tutorial.html
More file actions
2774 lines (2694 loc) · 265 KB
/
user_training_tutorial.html
File metadata and controls
2774 lines (2694 loc) · 265 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="author" content="Genome Forge contributors" />
<meta name="description" content="Publication-style self-study bioinformatics tutorial for Genome Forge using real biological records, stepwise workflows, and biological interpretation." />
<meta name="keywords" content="bioinformatics, DNA, cloning, plasmid, genome forge, tutorial, molecular biology" />
<meta name="generator" content="Genome Forge tutorial generator" />
<meta name="dcterms.created" content="2026-04-27" />
<meta name="dcterms.modified" content="2026-04-27" />
<title>Teach Yourself Bioinformatics with Genome Forge (v0.1.8)</title>
<style>
@page {
size: A4;
margin: 17mm 15mm 20mm 15mm;
}
@page :left {
margin-left: 18mm;
margin-right: 14mm;
@top-left {
content: "Teach Yourself Bioinformatics with Genome Forge";
color: #6b7280;
font-size: 8.5px;
letter-spacing: 0.06em;
}
@bottom-left {
content: counter(page);
color: #64748b;
font-size: 9px;
}
}
@page :right {
margin-left: 14mm;
margin-right: 18mm;
@top-right {
content: "Genome Forge Tutorial";
color: #6b7280;
font-size: 8.5px;
letter-spacing: 0.06em;
}
@bottom-right {
content: counter(page);
color: #64748b;
font-size: 9px;
}
}
@page :first {
@top-left { content: none; }
@top-right { content: none; }
@bottom-left { content: none; }
@bottom-right { content: none; }
}
@page cover {
@top-left { content: none; }
@top-right { content: none; }
@bottom-left { content: none; }
@bottom-right { content: none; }
}
@page pretitle {
@top-left { content: none; }
@top-right { content: none; }
@bottom-left { content: none; }
@bottom-right { content: none; }
}
@page imprint {
@top-left { content: none; }
@top-right { content: none; }
@bottom-left { content: none; }
@bottom-right { content: none; }
}
:root {
--ink: #17202a;
--muted: #526170;
--line: #c9d5df;
--panel: #f7fafc;
--panel-strong: #eef6f7;
--navy: #17324a;
--teal: #146c72;
--gold: #a56b14;
--rose: #8c4161;
--paper: #ffffff;
--shadow: 0 10px 26px rgba(20, 39, 54, 0.07);
--code-bg: #0b1220;
--code-ink: #dbeafe;
--rule: linear-gradient(90deg, #146c72, #a56b14, #8c4161);
}
* { box-sizing: border-box; }
html { hyphens: auto; }
body {
margin: 0;
background: #edf3f6;
color: var(--ink);
font-family: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Georgia, serif;
font-size: 11.5px;
line-height: 1.66;
counter-reset: figure;
}
a { color: var(--teal); text-decoration: none; }
p, li { widows: 3; orphans: 3; }
code {
font-family: "IBM Plex Mono", Menlo, Consolas, monospace;
background: #e9f1f5;
color: #14344d;
padding: 2px 5px;
border-radius: 4px;
font-size: 10.7px;
}
pre {
margin: 8px 0 0;
padding: 10px 12px;
border-radius: 8px;
background: var(--code-bg);
color: var(--code-ink);
font-family: "IBM Plex Mono", Menlo, Consolas, monospace;
font-size: 10.2px;
line-height: 1.45;
white-space: pre-wrap;
page-break-inside: avoid;
}
.doc { max-width: 940px; margin: 0 auto; padding: 20px 14px 44px; }
.half-title-page {
page: pretitle;
min-height: 245mm;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 12mm 10mm;
break-after: page;
}
.half-title-kicker {
margin: 0 0 10mm;
color: var(--gold);
text-transform: uppercase;
letter-spacing: 0.18em;
font-size: 10px;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.half-title {
margin: 0;
max-width: 600px;
color: var(--navy);
font-size: 28px;
line-height: 1.12;
font-family: "Baskerville", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
}
.half-subtitle {
margin: 10mm 0 0;
max-width: 520px;
color: var(--muted);
font-size: 12px;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.cover {
page: cover;
break-after: page;
position: relative;
overflow: hidden;
padding: 26px 26px 22px;
border-radius: 12px;
background:
linear-gradient(180deg, rgba(255,255,255,0.98), rgba(247, 251, 252, 0.98)),
linear-gradient(135deg, #ffffff 0%, #edf7f8 100%);
color: var(--ink);
box-shadow: var(--shadow);
margin-bottom: 12px;
border: 1px solid #cbd9e2;
}
.cover::before {
content: "";
position: absolute;
inset: 0 0 auto 0;
height: 6px;
background: var(--rule);
}
.cover h1 {
margin: 4px 0 10px;
font-family: "Baskerville", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
font-size: 33px;
line-height: 1.05;
max-width: 720px;
color: var(--navy);
}
.cover p { margin: 8px 0; max-width: 720px; }
.cover .deck {
max-width: 700px;
font-size: 13px;
color: #344454;
}
.eyebrow {
text-transform: uppercase;
letter-spacing: 0.12em;
font-size: 10.5px;
font-weight: 700;
opacity: 0.9;
margin: 0;
color: var(--gold);
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.meta { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 14px; }
.meta .k {
border: 1px solid #cbd9e2;
border-radius: 8px;
background: rgba(255,255,255,0.82);
padding: 9px 10px;
font-size: 10px;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.meta .k b { display: block; margin-top: 4px; font-size: 12px; color: var(--navy); }
.imprint-page {
page: imprint;
min-height: 245mm;
display: flex;
align-items: center;
justify-content: center;
padding: 10mm 0;
break-after: page;
}
.imprint-box {
width: 100%;
max-width: 760px;
border: 1px solid var(--line);
border-radius: 10px;
background: linear-gradient(180deg, #ffffff, #f3f8fa);
padding: 18px 20px;
box-shadow: var(--shadow);
}
.imprint-title {
margin: 0 0 8px;
color: var(--navy);
font-size: 22px;
font-family: "Baskerville", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
}
.cover-note {
margin-top: 14px;
padding-top: 10px;
border-top: 1px solid rgba(20, 108, 114, 0.22);
max-width: 720px;
color: #4c5966;
font-size: 10.7px;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.cover-spread {
margin-top: 14px;
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 10px;
}
.cover-shot {
border-radius: 8px;
overflow: hidden;
background: linear-gradient(180deg, rgba(255,255,255,0.96), rgba(241,247,249,0.98));
border: 1px solid #cbd9e2;
box-shadow: 0 10px 22px rgba(20, 39, 54, 0.08);
}
.cover-shot img {
width: 100%;
display: block;
aspect-ratio: 1.22 / 1;
object-fit: cover;
background: #edf4f7;
}
.cover-shot-text {
padding: 10px 12px 12px;
display: grid;
gap: 4px;
font-size: 10.6px;
color: var(--muted);
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.cover-shot-text b {
color: var(--navy);
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.section-kicker {
margin: 0 0 4px;
color: var(--gold);
text-transform: uppercase;
letter-spacing: 0.12em;
font-size: 9.4px;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.section {
background: var(--paper);
border: 1px solid var(--line);
border-radius: 10px;
padding: 16px 16px 14px;
margin: 14px 0;
box-shadow: var(--shadow);
}
.no-break { page-break-inside: avoid; break-inside: avoid-page; }
.frontmatter { margin-top: 0; }
.section h2 {
margin: 0 0 8px;
font-size: 21px;
color: var(--navy);
font-family: "Baskerville", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
}
.cover h1 { bookmark-level: 1; }
.half-title { bookmark-level: none; }
.section > h2, .cluster-title { bookmark-level: 2; }
.chapter-title { bookmark-level: none; }
.case-title { bookmark-level: 3; }
.section h3 {
margin: 0 0 6px;
font-size: 14px;
color: var(--teal);
font-family: "Baskerville", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
}
.lead { font-size: 13px; color: var(--ink); margin: 5px 0 0; }
.muted { color: var(--muted); }
.tiny { font-size: 10px; }
.grid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.pub-grid { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 12px; }
.cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.cards.cards-wide { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.card {
border: 1px solid var(--line);
border-radius: 8px;
background: linear-gradient(180deg, #ffffff, #f4f8fa);
padding: 12px;
page-break-inside: avoid;
}
.card.alt { background: linear-gradient(180deg, #f6fbfb, #ffffff); }
.metric {
margin: 6px 0;
font-size: 15px;
font-weight: 800;
color: var(--navy);
}
.badge {
display: inline-block;
margin: 2px 4px 2px 0;
padding: 3px 8px;
border-radius: 999px;
background: #e6f2f3;
color: #304c52;
font-size: 10px;
font-weight: 700;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
table { width: 100%; border-collapse: collapse; font-size: 10.7px; margin-top: 8px; page-break-inside: auto; }
th, td { border: 1px solid #d7e3eb; padding: 7px; vertical-align: top; text-align: left; }
th { background: #eaf3f6; color: #17314b; font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif; }
thead { display: table-header-group; }
tfoot { display: table-footer-group; }
tr { page-break-inside: avoid; page-break-after: auto; }
.toc ol, .toc ul, ul, ol { margin: 6px 0 6px 18px; padding: 0; }
li { margin: 3px 0; }
.toc-groups { margin-top: 10px; }
.toc-group {
border: 1px solid #e3dccf;
border-radius: 8px;
background: linear-gradient(180deg, #ffffff, #f5fafb);
padding: 10px 12px;
margin-bottom: 8px;
page-break-inside: avoid;
}
.toc-entry {
display: block;
padding: 5px 0;
color: var(--ink);
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.toc-cluster {
border-bottom: 1px dotted #d7cfbf;
margin-bottom: 4px;
font-weight: 700;
}
.toc-subentries {
margin-left: 12px;
padding-top: 4px;
}
.toc-case {
font-size: 10.4px;
color: #364754;
}
.toc-entry-title { display: inline; }
.toc-count { color: var(--muted); font-size: 10px; margin-left: 8px; }
.toc-entry::after {
content: leader(".") target-counter(attr(href), page);
color: var(--muted);
float: right;
}
.figure {
border: 1px solid #d6cebe;
border-radius: 8px;
background: #fbfdfe;
padding: 8px;
margin: 10px 0 0;
text-align: center;
page-break-inside: avoid;
counter-increment: figure;
}
.figure img { width: 100%; max-width: 860px; height: auto; border-radius: 6px; display: block; margin: 0 auto; }
.figure.narrow img { max-width: 620px; }
.figure.ui-shot img { max-width: 940px; box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12); }
.caption { margin: 6px 0 0; font-size: 10.2px; color: var(--muted); text-align: left; }
.caption::before {
content: "Figure " counter(figure) ". ";
color: var(--navy);
font-weight: 700;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.gallery { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.figure-card {
border: 1px solid var(--line);
border-radius: 8px;
background: linear-gradient(180deg, #ffffff, #f4f8fa);
padding: 10px;
display: grid;
grid-template-columns: 0.95fr 1.05fr;
gap: 10px;
align-items: start;
page-break-inside: avoid;
counter-increment: figure;
}
.figure-card img { width: 100%; height: auto; border-radius: 6px; background: #f8fbff; }
.figure-card h3 { margin: 0 0 4px; font-size: 13px; }
.figure-card h3::before {
content: "Figure " counter(figure) ". ";
display: block;
margin-bottom: 4px;
color: var(--gold);
font-size: 9.6px;
letter-spacing: 0.08em;
text-transform: uppercase;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.figure-card p { margin: 0; font-size: 10.8px; color: var(--muted); }
.print-only { display: none; }
.learning-path {
display: grid;
grid-template-columns: 0.82fr 1.18fr;
gap: 12px;
align-items: stretch;
margin-top: 12px;
border: 1px solid var(--line);
border-radius: 10px;
background: linear-gradient(180deg, #ffffff, #f4f9fb);
padding: 12px;
page-break-inside: avoid;
}
.path-intro {
border-right: 1px solid #d7e3eb;
padding-right: 12px;
}
.path-intro h3 {
margin: 0 0 6px;
color: var(--navy);
font-size: 17px;
}
.path-steps {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
.path-step {
position: relative;
border: 1px solid #d7e3eb;
border-radius: 8px;
background: #ffffff;
padding: 10px 10px 10px 40px;
}
.path-step span {
position: absolute;
left: 10px;
top: 10px;
display: inline-grid;
place-items: center;
width: 22px;
height: 22px;
border-radius: 50%;
background: var(--teal);
color: #ffffff;
font-size: 10px;
font-weight: 800;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.path-step h3 {
margin: 0 0 3px;
font-size: 12px;
color: var(--navy);
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.path-step p { margin: 0; color: var(--muted); font-size: 10.4px; }
.cluster-head { display: grid; grid-template-columns: 1.3fr 0.9fr; gap: 12px; align-items: start; margin-bottom: 10px; }
.chapter-opener {
border: 1px solid var(--line);
border-radius: 10px;
background:
linear-gradient(180deg, rgba(255,255,255,0.98), rgba(243, 249, 250, 0.98)),
linear-gradient(135deg, #ffffff 0%, #edf7f8 100%);
padding: 18px 20px 16px;
break-before: page;
break-after: page;
}
.chapter-title {
margin: 0 0 8px;
color: var(--navy);
font-size: 28px;
line-height: 1.12;
font-family: "Baskerville", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
}
.chapter-theme {
margin: 0;
max-width: 640px;
color: #405463;
font-size: 13px;
}
.chapter-opener-grid {
display: block;
margin-top: 16px;
}
.chapter-summary {
border: 1px solid #e2d9c9;
border-radius: 8px;
background: rgba(255,255,255,0.72);
padding: 12px 14px;
}
.chapter-case-strip { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.chapter-figure { max-width: 360px; margin-top: 12px; }
.chapter-figure img { max-width: 320px; }
.case-strip { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.case-chip {
display: inline-block;
padding: 4px 8px;
border-radius: 999px;
border: 1px solid #cbd9e2;
background: #f3f9fb;
color: #4b5563;
font-size: 9.8px;
font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif;
}
.cluster { break-before: auto; }
.case { border-top: 2px solid #d8e4eb; padding-top: 14px; margin-top: 14px; page-break-inside: avoid; }
.case:first-of-type { border-top: none; padding-top: 0; margin-top: 0; }
.case-head { display: grid; grid-template-columns: 1.25fr 0.95fr; gap: 12px; align-items: start; }
.case-title {
margin-top: 0;
padding-bottom: 5px;
border-bottom: 1px solid #d7e3eb;
}
.case-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; font-size: 10.4px; }
.case-meta > div { border: 1px solid var(--line); border-radius: 8px; padding: 8px; background: var(--panel); }
.case-meta b { display: block; color: var(--muted); margin-bottom: 4px; font-size: 9.8px; text-transform: uppercase; letter-spacing: 0.06em; font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif; }
.case-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 10px; }
.narrative h4 { margin: 0 0 4px; font-size: 12px; color: var(--navy); }
.study-note, .stepbox, .resultbox, .expected, .interpret, .biology {
margin-top: 10px;
border-radius: 8px;
padding: 10px 12px;
page-break-inside: avoid;
}
.study-note { border: 1px solid #d6c08d; border-left: 4px solid var(--gold); background: #fffaf0; }
.stepbox { border: 1px solid #bcd8dd; border-left: 4px solid var(--teal); background: #f3fafb; }
.resultbox { border: 1px solid #cbd9e2; border-left: 4px solid var(--navy); background: #f7fafc; }
.expected { border: 1px solid #c8dfcf; border-left: 4px solid #4f8a5b; background: #f6fbf7; }
.interpret { border: 1px solid #e4d7ab; border-left: 4px solid var(--gold); background: #fff9eb; }
.biology { border: 1px solid #e1cbd6; border-left: 4px solid var(--rose); background: #fdf6f9; }
.study-note b, .stepbox b, .resultbox b, .expected b, .interpret b, .biology b { display: block; margin-bottom: 4px; color: var(--navy); font-family: "Avenir Next", "Helvetica Neue", Arial, sans-serif; }
.cluster, .case, .card, .figure, pre { page-break-inside: avoid; }
@media print {
body { background: #ffffff; }
.doc { max-width: none; margin: 0; padding: 0; }
.section, .cover, .card, .figure, .figure-card, .cover-shot, .imprint-box {
box-shadow: none;
}
.section {
border-radius: 14px;
}
.print-only { display: block; }
.cluster-head { display: none; }
}
@media screen {
.print-only { display: none !important; }
}
</style>
</head>
<body>
<main class="doc">
<section class="half-title-page" aria-label="Half title page">
<p class="half-title-kicker">Genome Forge Tutorial</p>
<h1 class="half-title">Teach Yourself Bioinformatics with Genome Forge</h1>
<p class="half-subtitle">Textbook edition · self-study with real molecular data</p>
</section>
<section class="cover">
<p class="eyebrow">Genome Forge v0.1.8 · Textbook Edition</p>
<h1>Teach Yourself Bioinformatics with Genome Forge</h1>
<p class="deck">A self-study bioinformatics text for engineers, analysts, and scientists who want to learn from real laboratory molecules rather than toy examples.</p>
<p>The course uses public-source records such as EGFP, mCherry, pUC19/lacZ logic, and a BRAF exon 15 hotspot fragment. Clearly labelled training derivatives appear only when they sharpen a teaching goal, such as variant interpretation, family-wide assay design, or ambiguity-aware search.</p>
<div class="meta">
<div class="k">Mode<b>Self-study course</b></div>
<div class="k">Cases<b>39 total lessons</b></div>
<div class="k">Audience<b>CS to biology bridge</b></div>
<div class="k">Release<b>2026-04-27</b></div>
</div>
<div class="cover-spread"><div class="cover-shot">
<img src="assets/screenshots/flagship_case_a_map.png" alt="Restriction-map workflow in the live UI" />
<div class="cover-shot-text">
<b>Case A</b>
<span>Restriction-map workflow in the live UI</span>
</div>
</div><div class="cover-shot">
<img src="assets/screenshots/flagship_case_ah_trace.png" alt="Chromatogram-first review workflow" />
<div class="cover-shot-text">
<b>Case AH</b>
<span>Chromatogram-first review workflow</span>
</div>
</div><div class="cover-shot">
<img src="assets/screenshots/flagship_case_aj_blast.png" alt="BLAST-like identity search workflow" />
<div class="cover-shot-text">
<b>Case AJ</b>
<span>BLAST-like identity search workflow</span>
</div>
</div><div class="cover-shot">
<img src="assets/screenshots/flagship_case_al_degenerate_primers.png" alt="Degenerate-primer assay workflow" />
<div class="cover-shot-text">
<b>Case AL</b>
<span>Degenerate-primer assay workflow</span>
</div>
</div></div>
<p class="cover-note">Each lesson combines procedure, expected results, biological interpretation, and a clear statement of why the data matter in practice.</p>
</section>
<section class="imprint-page" aria-label="Imprint page">
<div class="imprint-box">
<p class="section-kicker">Imprint</p>
<h2 class="imprint-title">Edition and Copyright</h2>
<p><b>Title:</b> <i>Teach Yourself Bioinformatics with Genome Forge</i></p>
<p><b>Edition:</b> Genome Forge v0.1.8 textbook edition generated on <code>2026-04-27</code>.</p>
<p><b>Authoring body:</b> Genome Forge contributors</p>
<p><b>Repository:</b> <a href="https://github.com/felizvida/genomeforge">https://github.com/felizvida/genomeforge</a></p>
<p><b>License:</b> Apache License 2.0 for the project source. Public-source records and clearly labelled training derivatives are documented in the bundled dataset metadata.</p>
<p><b>Scope:</b> This volume contains 39 lessons, real-world sample data, and HTML/PDF outputs rebuilt from the same source tutorial.</p>
<p><b>Suggested citation:</b> Genome Forge contributors. <i>Teach Yourself Bioinformatics with Genome Forge</i>. Genome Forge v0.1.8. 2026.</p>
<p class="muted">Copyright © 2026 Genome Forge contributors.</p>
</div>
</section>
<section class="section frontmatter">
<p class="section-kicker">Front Matter</p>
<h2>Publication Notes</h2>
<div class="pub-grid">
<div class="card">
<h3>Abstract</h3>
<p>This volume teaches practical bioinformatics with Genome Forge through real biological records, stepwise software workflows, expected outputs, interpretation guidance, and biological explanation in one reproducible text.</p>
<p>The current edition contains 39 lessons organized into clusters that move from molecular architecture and restriction logic to assay design, assembly, comparative reasoning, ambiguity-aware analysis, and reproducible project delivery.</p>
</div>
<div class="card alt">
<h3>Edition and Citation</h3>
<p><b>Edition:</b> Genome Forge Textbook Edition, generated from repository source on <code>2026-04-27</code>.</p>
<p><b>Preferred citation:</b> <i>Teach Yourself Bioinformatics with Genome Forge</i>, Genome Forge v0.1.8, tutorial edition.</p>
<p><b>Formats:</b> HTML and PDF are generated from the same source so case numbering, sample data, and screenshots stay aligned.</p>
</div>
</div>
</section>
<section class="section no-break">
<p class="section-kicker">Course Map</p>
<h2>Learning Path</h2>
<p class="muted">The tutorial is organized as a reasoning sequence: identify the biological object, design the experiment, evaluate the evidence, then package the work so another person can trust it.</p>
<div class="learning-path" aria-label="Tutorial learning path">
<div class="path-intro">
<p class="section-kicker">Course Arc</p>
<h3>39 lessons, one practical reasoning loop</h3>
<p>Each case is designed to move from software action to biological claim. The point is not button memorization; it is learning how sequence evidence changes an experimental decision.</p>
</div>
<div class="path-steps"><div class="path-step">
<span>I</span>
<h3>Read the molecule</h3>
<p>Map, annotate, translate, and decide what kind of biological object is in front of you.</p>
</div><div class="path-step">
<span>II</span>
<h3>Design the experiment</h3>
<p>Choose primers, enzymes, assemblies, and edits with the failure modes visible.</p>
</div><div class="path-step">
<span>III</span>
<h3>Interrogate evidence</h3>
<p>Use traces, alignments, search, coverage, and ambiguity codes to decide what the data support.</p>
</div><div class="path-step">
<span>IV</span>
<h3>Package the work</h3>
<p>Preserve projects, reviews, share bundles, and explanations so someone else can continue cleanly.</p>
</div></div>
</div>
</section>
<section class="section no-break">
<p class="section-kicker">Using This Edition</p>
<h2>How to Use This Edition</h2>
<div class="grid2">
<div class="card">
<h3>Quickstart</h3>
<p>1. Start the web UI with <code>python3 web_ui.py --port 8080</code>.</p>
<p>2. Materialize a case bundle with <code>python3 docs/tutorial/datasets/extract_case_bundle.py --case A --out ./tmp/genomeforge_case_a</code>.</p>
<p>3. Open <code>http://127.0.0.1:8080</code>, load the FASTA from your case bundle, and follow the matching case steps below.</p>
</div>
<div class="card alt">
<h3>What This Edition Adds</h3>
<p>This edition explains what the input data are, why the task matters biologically, what a meaningful result looks like, and what you should not conclude from the output.</p>
<p>It is built so the numbers point to a real scientific story, and the ambiguity-aware methods are taught directly rather than left implicit.</p>
</div>
</div>
</section>
<section class="section">
<p class="section-kicker">Orientation</p>
<h2>Meaningful Results Preview</h2>
<p class="muted">These quick facts are derived directly from the bundled records and serve as a calibration point before you begin the 39 lessons.</p>
<div class="cards cards-wide"><div class="card">
<h3>EGFP is a clean coding-sequence teaching record</h3>
<p class="metric">720 bp → 239 aa + stop</p>
<p>That makes it ideal for learning frame-aware translation, variant annotation, and plasmid verification without the extra ambiguity of introns or splice context.</p>
</div><div class="card">
<h3>The pUC19 multiple-cloning site is densely engineered</h3>
<p class="metric">57 bp with 6 common unique sites</p>
<p>This tiny region packs a surprising amount of experimental flexibility into a few dozen bases, which is why it became a cloning-era classic.</p>
</div><div class="card">
<h3>A one-codon EGFP derivative can still be biologically dramatic</h3>
<p class="metric">EGFP vs Y67H-like variant: 99.861% nucleotide identity</p>
<p>The tutorial uses this to teach a core lesson in molecular biology: a small sequence delta can carry a large phenotype when it lands in a privileged site.</p>
</div><div class="card">
<h3>The BRAF training fragment is genomic context, not a standalone CDS</h3>
<p class="metric">196 bp with 2 naive frame-1 stop codons</p>
<p>That is exactly what makes it useful. It forces you to distinguish “this DNA is wrong” from “this DNA is a different biological object than a clean coding sequence.”</p>
</div><div class="card">
<h3>Reporter proteins can do similar jobs while having different sequence histories</h3>
<p class="metric">EGFP length 720 bp vs mCherry length 711 bp</p>
<p>Comparing them is a good reminder that “same use in the lab” does not imply “same sequence architecture” or even the same engineering tradeoffs.</p>
</div><div class="card">
<h3>Genome Forge now teaches uncertainty as a first-class sequence state</h3>
<p class="metric">EGFP ambiguity training record carries 3 explicit unresolved positions</p>
<p>That matters because real assay design and identity search often start before every position is perfectly resolved. Good workflows preserve uncertainty instead of flattening it away.</p>
</div></div>
</section>
<section class="section">
<p class="section-kicker">Data</p>
<h2>How to Use the Sample Data</h2>
<div class="grid2">
<div class="card">
<h3>Bundled Data Files</h3>
<ul>
<li><code>docs/tutorial/datasets/training_real_world_sequences.fasta</code>: base public-source sequences.</li>
<li><code>docs/tutorial/datasets/training_real_world_dataset.json</code>: metadata, sources, case inputs, and derived-record definitions.</li>
<li><code>docs/tutorial/datasets/case_playbook.md</code>: compact case-by-case checklist.</li>
<li><code>docs/tutorial/datasets/case_bundles/</code>: prebuilt ready-to-load bundles for all 39 tutorial cases.</li>
<li><code>docs/tutorial/datasets/extract_case_bundle.py</code>: writes ready-to-run per-case FASTA bundles.</li>
</ul>
</div>
<div class="card alt">
<h3>One Good Workflow Habit</h3>
<p>Always save the exact case bundle you used. That keeps the tutorial reproducible and avoids “I think I loaded the right sequence” problems. Every case already ships with a prebuilt bundle, so you can start quickly and still regenerate it later if you want to inspect provenance.</p>
<pre>python3 docs/tutorial/datasets/extract_case_bundle.py --case K --out ./tmp/genomeforge_case_k</pre>
</div>
</div>
</section>
<section class="section">
<p class="section-kicker">Study Method</p>
<h2>How to Study This Book</h2>
<div class="cards">
<div class="card">
<h3>Read the data type first</h3>
<p>Before you run anything, identify whether the input is a coding sequence, genomic fragment, plasmid-like construct, chromatogram-derived consensus, or uncertainty-bearing record. Most downstream mistakes come from treating those as interchangeable.</p>
</div>
<div class="card">
<h3>Use the sample results as calibration, not as a cheat sheet</h3>
<p>The sample results tell you what a believable answer should feel like. They do not replace your own run. A good habit is to compare your output to the sample and ask why any difference exists.</p>
</div>
<div class="card">
<h3>Write down the biological claim separately from the software output</h3>
<p>The result is not just “the tool said X.” The result is the biological sentence you can defend after seeing X. That distinction is what turns software use into bioinformatics reasoning.</p>
</div>
</div>
</section>
<section class="section">
<p class="section-kicker">Reference</p>
<h2>Primer on Ambiguity Codes</h2>
<p class="muted">Several later lessons teach ambiguity-aware matching directly. These symbols do not mean the sequence is broken. They mean the evidence still permits a small set of bases at a position, and Genome Forge can search, compare, and design around that uncertainty.</p>
<table><thead><tr><th>Code</th><th>Allowed base(s)</th><th>Meaning</th><th>Why you would keep it</th></tr></thead><tbody><tr><td><code>A</code></td><td>A</td><td>Adenine only</td><td>Exact called base or exact assay requirement.</td></tr><tr><td><code>C</code></td><td>C</td><td>Cytosine only</td><td>Exact called base or exact assay requirement.</td></tr><tr><td><code>G</code></td><td>G</td><td>Guanine only</td><td>Exact called base or exact assay requirement.</td></tr><tr><td><code>T</code></td><td>T</td><td>Thymine only</td><td>Exact called base or exact assay requirement.</td></tr><tr><td><code>R</code></td><td>A or G</td><td>Purine</td><td>Useful when a site varies between adenine and guanine.</td></tr><tr><td><code>Y</code></td><td>C or T</td><td>Pyrimidine</td><td>Common in mixed trace calls and degenerate primers.</td></tr><tr><td><code>S</code></td><td>G or C</td><td>Strong pair</td><td>Both options make three hydrogen bonds to the complement.</td></tr><tr><td><code>W</code></td><td>A or T</td><td>Weak pair</td><td>Both options make two hydrogen bonds to the complement.</td></tr><tr><td><code>K</code></td><td>G or T</td><td>Keto</td><td>Used when the target family tolerates a purine/pyrimidine swap at one site.</td></tr><tr><td><code>M</code></td><td>A or C</td><td>Amino</td><td>Useful for family-wide assay design.</td></tr><tr><td><code>B</code></td><td>C or G or T</td><td>Not A</td><td>Represents uncertainty while still excluding one base.</td></tr><tr><td><code>D</code></td><td>A or G or T</td><td>Not C</td><td>Represents uncertainty while still excluding one base.</td></tr><tr><td><code>H</code></td><td>A or C or T</td><td>Not G</td><td>Represents uncertainty while still excluding one base.</td></tr><tr><td><code>V</code></td><td>A or C or G</td><td>Not T</td><td>Represents uncertainty while still excluding one base.</td></tr><tr><td><code>N</code></td><td>A or C or G or T</td><td>Any base</td><td>Used when the evidence does not justify a more specific call.</td></tr></tbody></table>
<div class="cards" style="margin-top:10px">
<div class="card"><h3>Why ambiguity is honest</h3><p>Forcing an uncertain position to one exact base may look cleaner, but it destroys evidence. Ambiguity codes preserve what the data still allow.</p></div>
<div class="card"><h3>Why assay design cares</h3><p>Degenerate primers use these symbols on purpose so one assay can still cover a small family of related templates.</p></div>
<div class="card"><h3>Why search still works</h3><p>An uncertainty-bearing query can still identify the correct molecule family if the unresolved positions are represented explicitly instead of hidden.</p></div>
</div>
</section>
<section class="section">
<p class="section-kicker">Interface</p>
<h2>Visual Tour of the Workbench</h2>
<p class="muted">These illustrations help you recognize what Genome Forge is showing in each workflow: structure, evidence, divergence, and provenance.</p>
<div class="gallery"><div class="figure-card">
<img src="assets/01_map.svg" alt="Restriction-map reasoning" />
<div>
<h3>Restriction-map reasoning</h3>
<p>A plasmid map is only useful when it helps you choose a safe cloning move. This view is strongest when paired with feature context and digest logic.</p>
</div>
</div><div class="figure-card">
<img src="assets/02_sequence_track.svg" alt="Sequence-track thinking" />
<div>
<h3>Sequence-track thinking</h3>
<p>The whole point of a sequence-track view is to keep letters, codons, amino acids, and annotations in one frame of reference.</p>
</div>
</div><div class="figure-card">
<img src="assets/03_msa_heatmap.svg" alt="Family-scale comparison" />
<div>
<h3>Family-scale comparison</h3>
<p>Multiple alignment becomes biologically meaningful when you can point to a divergence hotspot and explain what the changed site may do.</p>
</div>
</div><div class="figure-card">
<img src="assets/04_history_graph.svg" alt="Provenance and history" />
<div>
<h3>Provenance and history</h3>
<p>Sequence work gains credibility when the molecular state and the decision trail stay attached to each other.</p>
</div>
</div><div class="figure-card">
<img src="assets/05_star_activity.svg" alt="Assay risk modeling" />
<div>
<h3>Assay risk modeling</h3>
<p>Good assay design is not just finding a candidate that works once. It is anticipating how the workflow can fail.</p>
</div>
</div><div class="figure-card">
<img src="assets/06_ligation_products.svg" alt="Assembly visualization" />
<div>
<h3>Assembly visualization</h3>
<p>Assembly views help translate overlap logic into a believable final construct rather than a hand-wavy plan.</p>
</div>
</div></div>
</section>
<section class="section">
<p class="section-kicker">Biological Objects</p>
<h2>Real-World Record Field Guide</h2>
<p>These are the biological objects that power the tutorial. Some are public-source sequences bundled directly in the FASTA file. Others are clearly labelled training derivatives created so specific comparison cases have an answer key.</p>
<table>
<thead><tr><th>Record</th><th>Origin</th><th>Why it matters</th><th>Input data explained</th><th>Source</th></tr></thead>
<tbody><tr><td><code>EGFP_CDS</code><div class="tiny muted">public-source</div></td><td>Engineered fluorescent reporter derived from the Aequorea victoria GFP family.</td><td>EGFP is a canonical lab reporter: great for teaching translation, cloning, sequence verification, and how a few codons can change an optical phenotype.</td><td>This is a protein-coding DNA sequence (CDS). The sequence is meant to be translated from the first base, so codon boundaries and reading frame matter immediately.</td><td><a href="https://pubmed.ncbi.nlm.nih.gov/9526659/">PubMed: enhanced GFP mutants overview</a></td></tr><tr><td><code>mCherry_CDS</code><div class="tiny muted">public-source</div></td><td>Monomeric red fluorescent protein from the mFruit engineering lineage.</td><td>mCherry is a real-world counterexample to GFP: same broad job as a reporter, different sequence history, color, and engineering constraints.</td><td>This is also a CDS, but it encodes a coral-derived red fluorescent protein rather than a GFP-family green reporter. That makes it useful for pairwise comparison and identity search.</td><td><a href="https://pubmed.ncbi.nlm.nih.gov/12060735/">PubMed: A monomeric red fluorescent protein</a></td></tr><tr><td><code>pUC19_MCS</code><div class="tiny muted">public-source</div></td><td>The pUC19 multiple-cloning site from one of the most widely used teaching and cloning vectors in molecular biology.</td><td>A dense multiple-cloning site is a perfect example of engineered sequence architecture: every base exists to make cloning more flexible.</td><td>This sequence is short, circularly interpreted, and packed with restriction motifs. It is intentionally synthetic and engineered for manipulation rather than natural gene expression.</td><td><a href="https://www.ncbi.nlm.nih.gov/nuccore/M77789.2">NCBI Nucleotide: pUC19 complete sequence</a></td></tr><tr><td><code>lacZ_alpha_fragment</code><div class="tiny muted">public-source</div></td><td>lacZ alpha fragment from the classic blue-white screening system associated with cloning vectors such as pUC19.</td><td>This fragment is a perfect teaching example of phenotype-linked DNA: inserting the wrong thing into the wrong place changes colony color.</td><td>The sequence is a cloning-era workhorse. It contains coding material, but many workflows care more about its role as a reporter module than as a standalone protein-coding fragment.</td><td><a href="https://www.ncbi.nlm.nih.gov/nuccore/M77789.2">NCBI Nucleotide: pUC19 complete sequence</a></td></tr><tr><td><code>BRAF_exon15_fragment</code><div class="tiny muted">public-source</div></td><td>A hotspot-rich fragment centered on human BRAF exon 15, the region associated with the famous V600 oncogenic mutation family.</td><td>This is the most medically consequential sequence in the training set. It is ideal for primer design, genotyping logic, CRISPR planning, and explaining why genomic DNA is not the same thing as a CDS.</td><td>This is a genomic fragment, not a clean coding-sequence input. If you translate it naively, you hit stop codons because intron/exon context and strand assumptions matter.</td><td><a href="https://www.ncbi.nlm.nih.gov/gene/673">NCBI Gene: BRAF (human)</a></td></tr><tr><td><code>EGFP_Y67H_training_variant</code><div class="tiny muted">derived-training</div></td><td>Training derivative of EGFP that changes the aromatic residue in the chromophore-forming motif.</td><td>This is not a random mutation. It models the idea that one codon change near a chromophore can produce a large optical shift, which is a powerful lesson for variant interpretation.</td><td>Because this record is derived from EGFP by a single codon change, it is excellent for pairwise alignment, amino-acid consequence analysis, and demonstrating how “small diff, big phenotype” problems happen in biology.</td><td><a href="https://pubmed.ncbi.nlm.nih.gov/9526659/">Derived from EGFP mutant logic described in GFP engineering literature</a></td></tr><tr><td><code>EGFP_S204Y_training_variant</code><div class="tiny muted">derived-training</div></td><td>Training derivative of EGFP that alters an aromatic-packing site near the chromophore environment.</td><td>It gives the tutorial a second closely related variant, which makes alignment, consensus, and comparison-lens examples far more realistic than comparing unrelated proteins only.</td><td>Like the Y67H-like variant, this record is generated from a public-source EGFP backbone. The point is not to claim a specific commercial reagent but to give you a realistic engineering-style mutation to reason about.</td><td><a href="https://pubmed.ncbi.nlm.nih.gov/9526659/">Derived from EGFP engineering principles</a></td></tr><tr><td><code>EGFP_ambiguity_consensus_training</code><div class="tiny muted">derived-training</div></td><td>Training derivative of EGFP that uses IUPAC ambiguity symbols to mimic a consensus sequence assembled from uncertain or mixed evidence.</td><td>It teaches that uncertainty can be represented explicitly instead of being hidden behind a forced single-base call.</td><td>This record is still an EGFP-like coding sequence, but a few positions are encoded as ambiguity symbols such as R, Y, and N. That means the sequence stands for a small set of plausible molecules rather than one exact DNA string.</td><td><a href="https://pubmed.ncbi.nlm.nih.gov/9526659/">Derived from EGFP_CDS for ambiguity-aware assay and search training</a></td></tr></tbody>
</table>
<div class="cards" style="margin-top:10px">
<div class="card"><h3>Reporter Biology</h3><p>EGFP and mCherry let you practice coding-sequence analysis on records that many labs actually clone, image, and verify.</p></div>
<div class="card"><h3>Cloning Architecture</h3><p>pUC19 MCS and lacZ alpha turn restriction logic into an experimentally meaningful story because the vector design is tied to blue-white screening.</p></div>
<div class="card"><h3>Disease-Linked DNA</h3><p>The BRAF fragment keeps the course grounded in medically important sequence interpretation, not only reporter-gene demos.</p></div>
</div>
</section>
<section class="section toc" role="doc-toc" aria-label="Table of contents">
<p class="section-kicker">Contents</p>
<h2>Table of Contents</h2>
<p class="muted">Recommended order for readers new to biology: Cluster A → B → C → D → G → E → F → H.</p>
<div class="toc-groups"><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-A">
<span class="toc-entry-title">Cluster A: Molecule Architecture and Restriction Logic</span>
<span class="toc-count">4 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-A"><span class="toc-entry-title">Case A: Restriction Map for Cloning Entry Design</span></a><a class="toc-entry toc-case" href="#case-B"><span class="toc-entry-title">Case B: Methylation-Aware Digest Interpretation</span></a><a class="toc-entry toc-case" href="#case-C"><span class="toc-entry-title">Case C: Star Activity Risk Review</span></a><a class="toc-entry toc-case" href="#case-U"><span class="toc-entry-title">Case U: k-mer Profile for Contamination Suspicion</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-B">
<span class="toc-entry-title">Cluster B: Sequence Meaning and Functional Annotation</span>
<span class="toc-count">4 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-D"><span class="toc-entry-title">Case D: Sequence Track and Translation Context</span></a><a class="toc-entry toc-case" href="#case-M"><span class="toc-entry-title">Case M: ORF Scan and Coding Potential Triage</span></a><a class="toc-entry toc-case" href="#case-P"><span class="toc-entry-title">Case P: Variant Annotation from Reference-Aligned Edits</span></a><a class="toc-entry toc-case" href="#case-W"><span class="toc-entry-title">Case W: Protein Property Inference from Translation</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-C">
<span class="toc-entry-title">Cluster C: Assay and Primer System Design</span>
<span class="toc-count">5 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-E"><span class="toc-entry-title">Case E: Primer Design and Thermodynamic Screening</span></a><a class="toc-entry toc-case" href="#case-F"><span class="toc-entry-title">Case F: Specificity Ranking with Virtual PCR/Gel</span></a><a class="toc-entry toc-case" href="#case-AL"><span class="toc-entry-title">Case AL: Degenerate Primer Strategy for a Variant Family</span></a><a class="toc-entry toc-case" href="#case-Q"><span class="toc-entry-title">Case Q: Multiplex PCR Panel Balancing</span></a><a class="toc-entry toc-case" href="#case-AA"><span class="toc-entry-title">Case AA: Positive and Negative Control Design</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-D">
<span class="toc-entry-title">Cluster D: Assembly and Construct Validation</span>
<span class="toc-count">3 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-G"><span class="toc-entry-title">Case G: Cloning Compatibility and Ligation Product Ranking</span></a><a class="toc-entry toc-case" href="#case-S"><span class="toc-entry-title">Case S: Circular Construct Integrity and Junction Validation</span></a><a class="toc-entry toc-case" href="#case-Z"><span class="toc-entry-title">Case Z: Multi-Trace Consensus for Final Construct Call</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-E">
<span class="toc-entry-title">Cluster E: Comparative and Population-Level Reasoning</span>
<span class="toc-count">4 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-H"><span class="toc-entry-title">Case H: MSA, Identity Heatmap, and Phylogeny</span></a><a class="toc-entry toc-case" href="#case-N"><span class="toc-entry-title">Case N: GC Landscape and Repeat Fragility</span></a><a class="toc-entry toc-case" href="#case-O"><span class="toc-entry-title">Case O: Homopolymer and Low-Complexity Risk Detection</span></a><a class="toc-entry toc-case" href="#case-X"><span class="toc-entry-title">Case X: Motif Enrichment and Significance Framing</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-F">
<span class="toc-entry-title">Cluster F: Editing and Design for Intervention</span>
<span class="toc-count">3 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-K"><span class="toc-entry-title">Case K: CRISPR Candidate and HDR Donor Design</span></a><a class="toc-entry toc-case" href="#case-R"><span class="toc-entry-title">Case R: Promoter/RBS Context for Expression Tuning</span></a><a class="toc-entry toc-case" href="#case-V"><span class="toc-entry-title">Case V: Codon Usage Bias and Host Portability</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-G">
<span class="toc-entry-title">Cluster G: Data Fidelity and Interoperability</span>
<span class="toc-count">11 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-I"><span class="toc-entry-title">Case I: DNA Container Roundtrip Validation</span></a><a class="toc-entry toc-case" href="#case-J"><span class="toc-entry-title">Case J: AB1 Trace Alignment and Consensus Editing</span></a><a class="toc-entry toc-case" href="#case-Y"><span class="toc-entry-title">Case Y: Read Simulation and Coverage Planning</span></a><a class="toc-entry toc-case" href="#case-AE"><span class="toc-entry-title">Case AE: Sequence Analytics Lens (GC, Skew, Complexity, Stop Density)</span></a><a class="toc-entry toc-case" href="#case-AF"><span class="toc-entry-title">Case AF: Comparison Lens (Divergence + Confidence Hotspots)</span></a><a class="toc-entry toc-case" href="#case-AG"><span class="toc-entry-title">Case AG: Native .dna Import and Multi-Format Conversion Workflow</span></a><a class="toc-entry toc-case" href="#case-AH"><span class="toc-entry-title">Case AH: Chromatogram-First Sanger Review and Confidence Gating</span></a><a class="toc-entry toc-case" href="#case-AI"><span class="toc-entry-title">Case AI: Trace-Based Genotyping and Plasmid Verification</span></a><a class="toc-entry toc-case" href="#case-AJ"><span class="toc-entry-title">Case AJ: BLAST-like Similarity Search for Identity, Origin, and Contamination</span></a><a class="toc-entry toc-case" href="#case-AK"><span class="toc-entry-title">Case AK: Reference Element Auto-Flagging and siRNA Design/Mapping</span></a><a class="toc-entry toc-case" href="#case-AM"><span class="toc-entry-title">Case AM: Ambiguity-Aware Identity Search and Motif Rescue</span></a></div>
</div><div class="toc-group">
<a class="toc-entry toc-cluster" href="#cluster-H">
<span class="toc-entry-title">Cluster H: Reproducibility, Governance, and Delivery</span>
<span class="toc-count">5 cases</span>
</a>
<div class="toc-subentries"><a class="toc-entry toc-case" href="#case-L"><span class="toc-entry-title">Case L: Collaboration, Audit, and Review Governance</span></a><a class="toc-entry toc-case" href="#case-T"><span class="toc-entry-title">Case T: Batch Reproducibility and Parameter Locking</span></a><a class="toc-entry toc-case" href="#case-AB"><span class="toc-entry-title">Case AB: Reproducible Report Package</span></a><a class="toc-entry toc-case" href="#case-AC"><span class="toc-entry-title">Case AC: Parameter Sensitivity and Robustness Check</span></a><a class="toc-entry toc-case" href="#case-AD"><span class="toc-entry-title">Case AD: End-to-End Release Checklist and Handoff</span></a></div>
</div></div>
</section>
<section class="section">
<p class="section-kicker">Interpretation</p>
<h2>How to Read a Bioinformatics Result Like a Scientist</h2>
<div class="cards">
<div class="card"><h3>Start with the biological question</h3><p>Ask what decision the output is supposed to support. A beautiful visualization is not useful if it does not change a real experimental choice.</p></div>
<div class="card"><h3>Respect the input data type</h3><p>A genomic fragment, a coding sequence, a plasmid map, and a chromatogram are not interchangeable. The same algorithm can be correct and still be answering the wrong question.</p></div>
<div class="card"><h3>Separate observation from inference</h3><p>Report what the tool measured first, then explain what you think that measurement means biologically, and finally say how confident you are.</p></div>
</div>
</section>
<section class="section cluster" id="cluster-A">
<div class="chapter-opener print-only" aria-label="Cluster A opener">
<p class="section-kicker">Cluster A</p>
<h2 class="chapter-title">Cluster A: Molecule Architecture and Restriction Logic</h2>
<p class="chapter-theme">How a DNA molecule is physically organized and where you can safely cut or modify it.</p>
<div class="chapter-opener-grid">
<div class="chapter-summary">
<h3>Lessons in This Cluster</h3>
<div class="chapter-case-strip"><span class="case-chip">Case A · Restriction Map for Cloning Entry Design</span><span class="case-chip">Case B · Methylation-Aware Digest Interpretation</span><span class="case-chip">Case C · Star Activity Risk Review</span><span class="case-chip">Case U · k-mer Profile for Contamination Suspicion</span></div>
</div>
<div class="chapter-figure figure narrow">
<img src="assets/01_map.svg" alt="Molecule Architecture and Restriction Logic" />
<p class="caption">Circular and linear sequence views are most useful when you interpret them as future wet-lab decisions, not just graphics.</p>
</div>
</div>
</div>
<div class="cluster-head">
<div>
<p class="eyebrow">Cluster A</p>
<h2 class="cluster-title">Cluster A: Molecule Architecture and Restriction Logic</h2>
<p class="muted">How a DNA molecule is physically organized and where you can safely cut or modify it.</p>
<div class="case-strip"><span class="case-chip">Case A · Restriction Map for Cloning Entry Design</span><span class="case-chip">Case B · Methylation-Aware Digest Interpretation</span><span class="case-chip">Case C · Star Activity Risk Review</span><span class="case-chip">Case U · k-mer Profile for Contamination Suspicion</span></div>
</div>
<div class="cluster-figure figure narrow">
<img src="assets/01_map.svg" alt="Molecule Architecture and Restriction Logic" />
<p class="caption">Circular and linear sequence views are most useful when you interpret them as future wet-lab decisions, not just graphics.</p>
</div>
</div>
<article class="case" id="case-A">
<div class="case-head">
<div>
<p class="eyebrow">Case A · Cluster A</p>
<h3 class="case-title">Case A: Restriction Map for Cloning Entry Design</h3>
<p class="lead">Which enzyme pair opens the vector cleanly without compromising the blue-white screening logic built around lacZ alpha?</p>
</div>
<div class="case-meta">
<div><b>Tab</b><span>Map</span></div>
<div><b>Workflow</b><span>Render the pUC19 map and compare unique restriction choices before adding a reporter insert.</span></div>
<div><b>Records</b><span><span class="badge">pUC19_MCS</span><span class="badge">lacZ_alpha_fragment</span></span></div>
<div><b>APIs</b><span><code>/api/map</code> <code>/api/digest</code></span></div>
</div>
</div>
<div class="case-grid">
<div class="card narrative">
<h4>Why This Case Matters</h4>
<p>You are loading a real vector architecture rather than a random string. The pUC19 multiple-cloning site is deliberately dense with restriction motifs, and the adjacent lacZ alpha fragment is what gives the classic blue/white colony readout. Those two pieces together teach why a plasmid map is really an experimental design document.</p>
<p>Restriction mapping matters because plasmid biology is modular. The MCS exists to be cut, but the neighboring reporter logic exists to be preserved or intentionally disrupted. A good cloning map therefore answers two questions at once: where can I cut, and what biological readout will survive afterward?</p>
</div>
<div class="card narrative alt">
<h4>Input Data Explained</h4>
<p>This sequence is short, circularly interpreted, and packed with restriction motifs. It is intentionally synthetic and engineered for manipulation rather than natural gene expression. The sequence is a cloning-era workhorse. It contains coding material, but many workflows care more about its role as a reporter module than as a standalone protein-coding fragment.</p>
<p>The pUC19 multiple-cloning site is only a few dozen bases long, but it is one of the most recognizable pieces of engineered DNA in molecular biology.</p>
</div>
</div>
<div class="stepbox"><b>Step-by-Step in Genome Forge</b><ol><li>Use the included prebuilt bundle <code>docs/tutorial/datasets/case_bundles/case_a/records.fasta</code> or regenerate it with <code>python3 docs/tutorial/datasets/extract_case_bundle.py --case A --out ./tmp/genomeforge_case_a</code>.</li><li>Open the <code>Map</code> tab in Genome Forge and load: <code>pUC19_MCS, lacZ_alpha_fragment</code>.</li><li>Run <code>Render the pUC19 map and compare unique restriction choices before adding a reporter insert.</code> once with default settings, then rerun after changing the enzyme panel.</li><li>Capture one screenshot of the main result panel so you can compare your run with the sample interpretation later.</li><li>Record the relevant endpoint(s): <code>/api/map, /api/digest</code> and write one sentence explaining the biological takeaway.</li></ol></div>
<div class="figure ui-shot">
<img src="assets/screenshots/flagship_case_a_map.png" alt="Restriction-map workflow in the live UI" />
<p class="caption"><b>Restriction-map workflow in the live UI</b>. Real UI screenshot from the bundled pUC19 MCS case. The map is rendered with a common cloning enzyme panel so you can see which sites are unique before choosing a directional cut strategy.</p>
</div>
<div class="resultbox"><b>Sample Results</b><p class="muted">Representative output shaped around the bundled real-world record(s) or their documented training derivatives. Values are rounded for readability, but the biological story is tied to the included data.</p><pre>{
"unique_sites": [
"EcoRI",
"BamHI",
"HindIII",
"XbaI",
"PstI",
"KpnI"
],
"best_directional_pair": [
"EcoRI",
"BamHI"
],
"lacZ_alpha_screen_preserved_until_insert": true
}</pre></div>
<div class="expected"><b>Expected Results</b><ul><li>A circular map with the multiple-cloning site and reporter context clearly marked.</li><li>A shortlist of unique cut sites or directional cut pairs that can linearize the vector safely.</li><li>A written decision explaining which enzyme choice best supports the intended cloning strategy.</li></ul></div>
<div class="interpret"><b>How to Interpret the Results</b><ul><li>Unique cut sites are valuable because they open the vector once and only once.</li><li>A directional pair is stronger than two random unique sites because it helps enforce insert orientation.</li><li>If your chosen sites overlap a feature you depend on, the map is warning you before the bench can do it expensively.</li></ul></div>
<div class="biology"><b>Biological Explanation</b><p>Restriction mapping matters because plasmid biology is modular. The MCS exists to be cut, but the neighboring reporter logic exists to be preserved or intentionally disrupted. A good cloning map therefore answers two questions at once: where can I cut, and what biological readout will survive afterward?</p><p><b>Fun fact from this example:</b> The pUC19 multiple-cloning site is only a few dozen bases long, but it is one of the most recognizable pieces of engineered DNA in molecular biology.</p></div>
</article>
<article class="case" id="case-B">
<div class="case-head">
<div>